当前位置:   article > 正文

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/301542
推荐阅读
相关标签
  

闽ICP备14008679号