• Python selenium爬取影评生成词云图


    问题描述

    通过中文分词、过滤停用词、生成词云图等步骤对评论数据进行处理和可视化。

    效果截图如下

    请添加图片描述
    非常nice

    问题分析

    该程序需要使用 Selenium 库来模拟浏览器操作,因此需要下载安装 Chrome 浏览器以及对应版本的 Chromedriver。
    程序中需要读取本地 stopwords.txt 文件中的停用词列表,因此需要先准备好该文件。
    生成的词云图字体需要下载并放到与文件同级的目录上

    前期准备

    代码中用到的库和版本如下

    • Selenium (3.141.0)
    • jieba (0.42.1)
    • wordcloud (1.8.1)
    • matplotlib(3.4.2)
    • numpy (1.20.3)

    运行命令
    pip install selenium jieba wordcloud matplotlib numpy 进行下载

    完整代码及解释

    # 导入所需库
    from selenium import webdriver  # 网页自动化测试工具
    from selenium.webdriver.common.by import By  # 定位元素方法
    import jieba  # 中文分词库
    from wordcloud import WordCloud  # 词云库
    import matplotlib.pyplot as plt  # 数据可视化库
    import numpy as np  # 数学计算库
    import os  # 操作系统接口库
    
    # 创建浏览器对象并打开目标网页
    browser = webdriver.Chrome()  # 创建 Chrome 浏览器对象
    url = 'https://movie.douban.com/subject/34841067/comments?status=P'  # 目标网页的 URL
    browser.get(url)  # 打开目标网页
    
    # 定义选择器和结果列表
    selector = 'span.short'  # CSS 选择器,表示评论所在的元素
    results = []  # 用于存储获取到的评论
    
    # 判断是否存在下一页按钮,不断翻页并获取评论数据
    while True:
        elements = browser.find_elements(By.CSS_SELECTOR, selector)  # 使用选择器查找所有评论元素
        for element in elements:
            comment = element.text.strip()  # 获取元素的文本,去除空格和换行符
            if len(comment) > 0:  # 如果评论非空
                results.append(comment)  # 存储该评论
        # 点击下一页按钮
        try:
            next_btn = browser.find_element(By.LINK_TEXT, '后页>')  # 查找“下一页”按钮元素
            next_btn.click()  # 点击“下一页”按钮
        except:
            break  # 如果没有找到“下一页”按钮,说明已经到达最后一页,退出循环
    
    # 关闭浏览器对象
    browser.quit()  # 关闭浏览器
    
    # 合并所有评论文本
    text = '\n'.join(results)  # 将所有评论文本拼接成一个字符串,用换行符隔开
    
    # 使用 jieba 分词库进行中文分词
    words = jieba.cut(text)  # 对评论文本进行中文分词,返回一个生成器对象
    
    # 获取停用词列表
    stop_words_path = 'stopwords.txt'  # 停用词文件的路径
    with open(stop_words_path, encoding='utf-8') as f:
        stop_words = f.read().splitlines()  # 读取停用词文件,将每行转换为一个元素,存储为列表
    
    # 过滤出有效词汇
    valid_words = [word for word in words if word not in stop_words]  # 过滤掉停用词,仅保留有效词汇
    
    # 将过滤后的词汇拼接成字符串
    valid_text = ' '.join(valid_words)  # 将词汇列表中的所有元素拼接成一个字符串,用空格隔开
    
    # 创建词云对象
    wc = WordCloud(
        font_path="PingFang Bold.ttf",  # 指定词云字体
        width=800,  # 词云图像宽度
        height=600,  # 词云图像高度
        background_color='white',  # 背景颜色
        max_words=200,  # 最大显示单词数
        max_font_size=80,  # 最大字号
        random_state=42  # 随机状态
    )
    
    # 生成词云图
    wc.generate(valid_text)  # 生成词云图像数据
    
    # 定义输出路径
    output_dir = 'output'  # 词云图像输出路径
    output_path = os.path.join(output_dir, 'wordcloud.png')  # 拼接输出文件路径
    
    # 检查输出目录是否存在
    if not os.path.exists(output_dir):  # 如果输出目录不存在
        os.makedirs(output_dir)  # 创建该目录及其所有父目录
    
    # 输出词云图
    wc.to_file(output_path)  # 将词云图像输出到指定文件
    
    # 显示词云图
    plt.imshow(wc, interpolation='bilinear')  # 将词云图像显示出来,使用双线性差值算法平滑显示
    plt.axis('off')  # 不显示坐标轴
    plt.show()  # 显示图像
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82

    字体素材

    链接: https://pan.baidu.com/s/1-nXL9-8NRbWPd2m4AGOUNw 提取码: esf2

  • 相关阅读:
    vue3+ts项目04-国际化
    深度学习资源列表
    学习-Java输入输出之InputStream类之字节数据输入处理
    阿里首次开源 Java 10万字八股文,Github仅一天星标就超60K
    【SpringCloud学习笔记】服务提供者,服务消费者
    openFeign
    apple pencil性价比高吗?适用ipad的电容笔推荐
    [附源码]计算机毕业设计基于springboot的高校资源共享平台
    javaWeb项目中:连接mysql的驱动问题
    ZigBee 3.0理论教程-通用-1-03:协议架构-物理层(PHY)
  • 原文地址:https://blog.csdn.net/qq_33681891/article/details/131085511