前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python selenium爬取影评生成词云图

Python selenium爬取影评生成词云图

作者头像
全栈若城
发布2024-02-29 18:40:09
1430
发布2024-02-29 18:40:09
举报
文章被收录于专栏:若城技术专栏若城技术专栏

问题描述

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

效果截图如下

非常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 进行下载

完整代码及解释

代码语言:javascript
复制
# 导入所需库
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()  # 显示图像

字体素材

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 效果截图如下
  • 问题分析
  • 前期准备
  • 完整代码及解释
  • 字体素材
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档