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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: Python爬取豆瓣短评并生成词云分析

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

  1. 爬取豆瓣短评数据。
  2. 数据清洗和预处理。
  3. 使用词云技术生成可视化结果。
  4. 分析词云结果,提取关键信息。
    二、技术栈
    ● Python:强大的编程语言,支持多种库和框架。
    ● Requests:用于发送HTTP请求,获取网页数据。
    ● BeautifulSoup:用于解析HTML页面,提取所需数据。
    ● jieba:中文分词库,用于对短评进行分词处理。
    ● wordcloud:用于生成词云,展示高频词汇。
    ● matplotlib:用于绘制词云图像。
    三、爬取豆瓣短评
  5. 环境准备
    在开始之前,需要安装以下Python库:
    pip install requests
    pip install beautifulsoup4
    pip install jieba
    pip install wordcloud
    pip install matplotlib
  6. 爬虫实现
    豆瓣的短评数据可以通过访问电影详情页的短评部分获取。以下是爬取豆瓣短评的代码实现:
    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.findall('div', class='comment')
for item in commentitems:
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)} 条短评')

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

def 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_comments

cleaned_comments = clean_comments(all_comments)
print(cleaned_comments[:5]) # 查看清洗后的前5条评论
四、生成词云
词云是一种常见的文本可视化方式,通过将高频词汇以更大的字体显示,直观地展示文本内容的重点。以下是生成词云的代码实现:
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt

def 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)

  1. 中文字体问题
    在生成词云时,需要注意中文字体的处理。默认情况下,WordCloud库不支持中文字符,因此需要指定一个支持中文的字体文件路径。例如,可以使用Windows系统中的“simhei.ttf”(黑体)字体文件。
    五、词云分析
    通过生成的词云,我们可以直观地看到高频词汇,从而分析用户对电影的评价。例如,如果词云中出现了“感人”“经典”“震撼”等词汇,则表明用户对该电影的评价较为积极;如果出现“无聊”“拖沓”“差”等词汇,则可能表示用户对该电影的评价不佳。
相关文章
|
域名解析 监控 网络协议
分享40个主机域名PHP源码,总有一款适合你
分享40个主机域名PHP源码,总有一款适合你
798 1
|
测试技术
7、软件产品交付过程——所有表集合
7、软件产品交付过程——所有表集合
483 0
|
11月前
|
数据采集 存储 Java
多线程Python爬虫:加速大规模学术文献采集
多线程Python爬虫:加速大规模学术文献采集
|
12月前
|
数据采集 存储 数据可视化
Python爬取招标信息并生成可视化分析报告
Python爬取招标信息并生成可视化分析报告
|
自然语言处理 数据可视化 搜索推荐
用Python制作酷炫词云图,原来这么简单!
用Python制作酷炫词云图,原来这么简单!
3843 1
|
数据采集 数据可视化 算法
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
本文设计并实现了一个基于Python的豆瓣电影TOP250爬虫与可视化系统,通过获取电影评分、评论并应用词云和饼图等可视化技术,为用户提供了电影评价的直观展示和深入分析。
3191 3
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
|
10月前
|
传感器 机器学习/深度学习 监控
【图像融合】差异的高斯:一种简单有效的通用图像融合方法[用于融合红外和可见光图像、多焦点图像、多模态医学图像和多曝光图像](Matlab代码实现)
【图像融合】差异的高斯:一种简单有效的通用图像融合方法[用于融合红外和可见光图像、多焦点图像、多模态医学图像和多曝光图像](Matlab代码实现)
482 0
|
人工智能 Devops 测试技术
软件质量工程的关键实践
软件质量工程的关键实践
504 0
|
数据采集 传感器 数据管理
读数据质量管理:数据可靠性与数据质量问题解决之道04收集与清洗
【11月更文挑战第8天】本文介绍了数据收集的重要性和挑战,以及数据收集的方法和工具。数据收集是数据质量管理的基础,能够确保数据的完整性和准确性。然而,数据来源的多样性和数据丢失等问题也带来了挑战。文中还详细描述了内部系统、外部数据和传感器数据的收集方法,以及数据清洗的目标和流程,包括数据审查、问题数据处理和数据验证等步骤。
459 2
|
UED 开发者 容器
Flutter&鸿蒙next 中的 Expanded 和 Flexible 使用技巧详解
在 Flutter 开发中,Expanded 和 Flexible 是两个常用的布局控件,用于管理 UI 布局的空间分配。Expanded 使子组件占据主轴上的所有剩余空间,而 Flexible 允许通过 flex 参数按比例分配空间。掌握两者的区别和使用场景,可以让你在构建复杂 UI 时更加得心应手。
895 1

热门文章

最新文章