Python爬取哆啦A梦豆瓣影评并生成词云图实战
本文详解如何使用Python爬取《哆啦A梦:伴我同行2》的豆瓣短评,并通过jieba库进行中文分词、去停用词处理,最终利用wordcloud库生成可视化词云图。教程涵盖requests请求、正则解析、词典动态调整及词频统计等核心步骤,适合爬虫初学者练手。
一、前言
通过本文的学习,你将掌握以下技能:
① 获取豆瓣电影相关数据;
② 学习绘制词云图的完整流程;

二、豆瓣爬虫实现步骤
虽然豆瓣平台包含大量可挖掘的数据,但本文仅聚焦于评论信息的抓取。
目标抓取网址如下:
https://movie.douban.com/subject/34913671/comments?status=P
由于只需提取单一字段,直接使用re正则表达式即可高效解决。

各位爬虫初学者,这是一个极佳的练手项目。
接下来详细介绍具体的爬虫操作流程:
# 1. 导入相关库,用什么库,都写在这里
import requests
import chardet
import re
# 2. 构造请求头,这是一个反扒措施,初期学会总结,哪些网站都用了哪些,总结多了,用起来就得心应手。
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
#在爬虫里面如果出现了Referer最好也粘上去,因为有时候服务器会根据Referer来判断请求时由浏览器还是爬虫发出的
'Referer':'https://www.douban.com/'
}
# 3. 这个循环,类似于翻页操作
for i in range(0,1001,20):
url = f"https://movie.douban.com/subject/34913671/comments?start={i}&limit=20&status=P&sort=new_score"
# 4. 使用requests库发起请求
response = requests.get(url,headers=headers)#发起请求得到响应
# 5. 有时候返回结果可能会乱码,这里记得调用encoding属性,修改编码
response.encoding = "utf-8"
# 6. 获取返回的结果,调用的是text属性。一定要区分text和content属性的区别
text = response.text#返回一个经过解码的字符串
# 7. 解析数据,这里直接使用正则解析
comments_list = [i for i in re.findall('<span class="short">(.*?)</span>',text,re.S)]
# 8. 数据存储,针对列表中的每一条数据,我们直接使用open()函数,写入到txt文档
for comment in comments_list:
with open(r"哆啦A梦:伴我同行2.txt","a",encoding = "utf-8") as f :
f.write(comment + "\n")
三、最终效果展示

四、词云图制作流程
许多读者对词云制作感到陌生,此处提供一套详细操作指南,大家可照猫画虎进行实践。
制作词云的具体步骤如下:
- ① 导入所需相关库;
- ② 读取文本文件,并利用jieba库动态调整词典;
- ③ 调用jieba库中的lcut()方法执行分词;
- ④ 加载停用词表,补充额外停用词并执行过滤;
- ⑤ 进行词频统计;
- ⑥ 绘制词云图;
① 导入相关库
根据实际需求导入相应的Python库即可。
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from imageio import imread
import warnings
warnings.filterwarnings("ignore")
② 读取文本文件,使用jieba库动态修改词典
此处使用with open()语句读取文本文件,不再赘述。重点解释动态修改词典的操作。
sentence = "湖北广水第三条街,有一条狗"
list(jieba.cut(sentence))
运行结果如下:

针对上述分词结果,若希望将“湖北广水”和“第三条街”视为完整词汇而不被拆分,该如何处理?此时需借助add_word()方法动态更新词典。
sentence = "湖北广水第三条街,有一条狗"
jieba.add_word("湖北广水")
jieba.add_word("有一条狗")
list(jieba.cut(sentence))
运行结果如下:

总结:
- jieba.add_word()方法仅支持逐个动态添加特定词语。
- 若需批量动态添加多个词语,应使用jieba.load_userdict()方法。即把所有自定义词汇存入一个文本文件中,通过该方法一次性更新词典集。
基于上述基础,我们直接读取文本后动态修改词典。
with open(r"哆啦A梦:伴我同行2.txt",encoding="utf-8") as f:
txt = f.read()
txt = txt.split()
jieba.add_word("哆啦A梦")
jieba.add_word("大雄")
③ 使用jieba库中的lcut()方法进行分词
仅需一行代码,实现非常简单。
data_cut = [jieba.lcut(x) for x in txt]
④ 读取停用词,添加额外停用词,并去除停用词
读取停用词时,采用split()函数切分后将得到一个停用词列表。接着,采用+号将额外停用词添加至列表中即可。
# 读取停用词
with open(r"stoplist.txt",encoding="utf-8") as f:
stop = f.read()
stop = stop.split()
# 额外添加停用词,这里我们只添加了一个空格
stop = [" "] + stop
# 去除停用词
s_data_cut = pd.Series(data_cut)
all_words_after = s_data_cut.apply(lambda x:[i for i in x if i not in stop])
⑤ 词频统计
此处需注意series中value_counts()函数的具体用法。
all_words = []
for i in all_words_after:
all_words.extend(i)
word_count = pd.Series(all_words).value_counts()
⑥ 绘制词云图
# 1、读取背景图片
back_picture = imread(r"aixin.jpg")
# 2、设置词云参数
wc = WordCloud(font_path="simhei.ttf",
background_color="white",
max_words=2000,
mask=back_picture,
max_font_size=200,
random_state=42
)
wc2 = wc.fit_words(word_count)
# 3、绘制词云图
plt.figure(figsize=(16,8))
plt.imshow(wc2)
plt.axis("off")
plt.show()
wc.to_file("ciyun.png")
五、效果图展示

从词云图大致可以看出:这又是一部催泪电影,这是一部情怀电影,陪伴我们长大的大雄都结婚了?那我们呢?其实我们小时候,就盼望着大雄和静香能够是好盆友,就在这部电影,他们结婚了。这部电影应该怎么上演呢?大家可以去电影院一探究竟。
到此这篇关于Python爬取哆啦A梦-伴我同行2豆瓣影评并生成词云图的文章就介绍到这了,更多相关Python爬取影评并生成词云图内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









