博客
关于我
Python selenium爬取影评生成词云图
阅读量:798 次
发布时间:2023-03-06

本文共 2047 字,大约阅读时间需要 6 分钟。

问题描述

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

问题分析

需要使用 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()  url = 'https://movie.douban.com/subject/34841067/comments?status=P'  browser.get(url)  # 定义选择器和结果列表  selector = 'span.short'  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()

字体素材

字体素材已移至百度网盘,具体链接已去除。

转载地址:http://uhafk.baihongyu.com/

你可能感兴趣的文章
PyQt5——多线程、信号与槽
查看>>
PyQt5——开发地图软件
查看>>
PyQt5——装饰器信号与槽
查看>>
PyQt5——软件密码登陆跳转主界面
查看>>
PyQt5——通过信号与槽进行数据传输
查看>>
PyQt5“定时器不能从另一个线程启动“更改 QLabel 的大小时出错
查看>>
pyqt5不显示窗口
查看>>
pyqt5任意组件的拖拽问题
查看>>
PyQt5信号与槽学习笔记——自定义信号与槽(二)
查看>>
PyQt5学习笔记——信号与槽
查看>>
PyQt5开发暗黑风格的计时器
查看>>
pyqt5教程11:绘制外观
查看>>
pyqt5教程12:拖放功能
查看>>
pyqt5教程13:客户定制组件
查看>>
pyqt5教程6:信号和事件
查看>>
PyQt5教程7:布局Layout管理
查看>>
pyqt5教程8:对话框
查看>>
pyqt5教程9:Widgets组件
查看>>
PyQt5教程——组件(7)
查看>>
Pytest monkeypatch不适用于导入的函数
查看>>