当前位置: 首页 > news >正文

Python爬取豆瓣短评并生成词云分析

、项目概述

本项目的目标是爬取豆瓣上某部电影的短评数据,并生成词云进行情感分析。我们将使用Python编程语言,借助爬虫技术获取数据,并利用自然语言处理和数据可视化工具进行分析。具体步骤包括:

  1. 爬取豆瓣短评数据。
  2. 数据清洗和预处理。
  3. 使用词云技术生成可视化结果。
  4. 分析词云结果,提取关键信息。

二、技术栈

  • Python:强大的编程语言,支持多种库和框架。
  • Requests:用于发送HTTP请求,获取网页数据。
  • BeautifulSoup:用于解析HTML页面,提取所需数据。
  • jieba:中文分词库,用于对短评进行分词处理。
  • wordcloud:用于生成词云,展示高频词汇。
  • matplotlib:用于绘制词云图像。

三、爬取豆瓣短评

1. 环境准备

在开始之前,需要安装以下Python库:

pip install requests
pip install beautifulsoup4
pip install jieba
pip install wordcloud
pip install matplotlib

2. 爬虫实现

豆瓣的短评数据可以通过访问电影详情页的短评部分获取。以下是爬取豆瓣短评的代码实现:

import requests
from bs4 import BeautifulSoup# 代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"# 构造代理服务器的认证信息
proxies = {"http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}","https": f"https://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
}def get_douban_comments(movie_id, start=0, limit=20):"""爬取豆瓣电影短评:param movie_id: 豆瓣电影ID:param start: 起始评论位置:param limit: 每次获取的评论数量:return: 评论列表"""comments = []headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}url = f"https://movie.douban.com/subject/{movie_id}/comments?start={start}&limit={limit}"response = requests.get(url, headers=headers, proxies=proxies)  # 使用代理if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')comment_items = soup.find_all('div', class_='comment')for item in comment_items:comment = item.find('p', class_='comment-content').get_text().strip()comments.append(comment)return comments# 示例:爬取电影《肖申克的救赎》的短评
movie_id = '1292052'  # 豆瓣电影ID
all_comments = []
for i in range(0, 100, 20):  # 获取前100条评论comments = get_douban_comments(movie_id, start=i)all_comments.extend(comments)print(f'共获取到 {len(all_comments)} 条短评')

3. 数据清洗

爬取到的短评数据可能包含HTML标签、特殊字符或无关信息,需要进行清洗和预处理。以下是数据清洗的代码:

import redef clean_comments(comments):"""清洗短评数据:param comments: 评论列表:return: 清洗后的评论列表"""cleaned_comments = []for comment in comments:# 去除HTML标签和特殊字符cleaned_comment = re.sub(r'<.*?>', '', comment)cleaned_comment = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9]', ' ', cleaned_comment)cleaned_comments.append(cleaned_comment)return cleaned_commentscleaned_comments = clean_comments(all_comments)
print(cleaned_comments[:5])  # 查看清洗后的前5条评论

四、生成词云

词云是一种常见的文本可视化方式,通过将高频词汇以更大的字体显示,直观地展示文本内容的重点。以下是生成词云的代码实现:

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as pltdef generate_wordcloud(comments):"""生成词云:param comments: 评论列表"""# 合并所有评论为一个长文本text = ' '.join(comments)# 使用jieba进行中文分词words = jieba.cut(text)word_text = ' '.join(words)# 创建WordCloud对象wordcloud = WordCloud(font_path='path/to/simhei.ttf',  # 指定中文字体路径width=800,height=600,background_color='white',  # 设置词云背景颜色max_words=100,  # 设置最多显示的单词数min_font_size=10,  # 设置最小字体大小max_font_size=100,  # 设置最大字体大小).generate(word_text)# 使用matplotlib绘制词云plt.figure(figsize=(10, 8))plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off')  # 关闭坐标轴plt.show()generate_wordcloud(cleaned_comments)

5. 中文字体问题

在生成词云时,需要注意中文字体的处理。默认情况下,WordCloud库不支持中文字符,因此需要指定一个支持中文的字体文件路径。例如,可以使用Windows系统中的“simhei.ttf”(黑体)字体文件。

五、词云分析

通过生成的词云,我们可以直观地看到高频词汇,从而分析用户对电影的评价。例如,如果词云中出现了“感人”“经典”“震撼”等词汇,则表明用户对该电影的评价较为积极;如果出现“无聊”“拖沓”“差”等词汇,则可能表示用户对该电影的评价不佳。

http://www.dtcms.com/a/252724.html

相关文章:

  • 21 大刷题平台开启编程王者之路
  • Macbook如何关闭掉端口
  • 【WPF】WPF ComboBox 数据驱动不刷新?SelectedItem 与 SelectedIndex 解析!
  • 2025年SYN-CC混合攻击防御实战:某金融平台抵御800Gbps双重风暴实录
  • AI预警,数据“解码”:我们如何用技术为象牙塔筑起金融防火墙?
  • 北航将层次对称性引入多智能体强化学习,提升样本效率
  • 解决 Ruby Gem “rexml“ 版本不兼容问题 (CocoaPods/Firebase 相关错误)
  • vue3-标签的ref属性,props的使用,vue3的生命周期详解
  • 数据结构 双向链表与双向循环链表 6.17
  • 14.2 《3小时从零搭建企业级LLaMA3语言助手:GitHub配置+私有化模型集成全实战》
  • QGIS新手教程5:图层属性查询与表达式筛选技巧
  • 鸿蒙组件通用属性深度解析:从基础样式到高级定制的全场景指南
  • AI编程浏览器插件(简易版)
  • 云原生时代配置中心全景解读:从Spring Cloud Config到Nacos深度实践
  • 图扑 HT 3D 场景视频嵌入应用功能
  • JVM(4)——引用类型
  • 【JVM 09-垃圾回收】
  • 【在线五子棋对战】七、数据管理模块实现
  • 依赖已导入,已下载,无法使用问题
  • 【MySQL基础】表的功能实现:增删查改详细讲解
  • 基于大模型的急性梗阻性化脓性胆管炎风险预测与治疗方案研究报告
  • 走进Coinate|迪拜第二大交易平台如何构建极速金融引擎
  • 直线拟合 - 最小二乘法与 RANSAC 算法
  • LeetCode 算 法 实 战 - - - 有 效 的 括 号、用 队 列 实 现 栈、用 栈 实 现 队 列 和 设 计 循 环 队 列
  • 佰力博科技与您探讨铁电分析仪适用场景
  • 物联网传输网关、RTU、DTU及SCADA系统的技术难点与未来开发方向
  • 【数据库】大模型时代的数据库新范式:从平替到智能演进
  • node.js使用websockify代理VNC代理使用NoVNC进行远程桌面实现方案
  • uniapp 对接deepseek
  • element ui el-table嵌套el-table,实现checkbox联动效果