Python爬取《哆啦A梦-伴我同行2》影评,手把手带你绘制词云图!

网友投稿 279 2022-09-16

Python爬取《哆啦A梦-伴我同行2》影评,手把手带你绘制词云图!

本文简介

《哆啦A梦:伴我同行2》是纪念《哆啦A梦》50周年的作品之一,于2021年5月28日在中国内地上映。

​​哆啦A梦​​​系列,是陪伴我,乃至陪伴了几代人成长的故事。50年来,藤子·F·不二雄先生创造了​​竹蜻蜓​​​,​​任意门​​​,​​时光机器​​等等无数的新奇道具,让大雄和他的小伙伴们经历了诸如宇宙战争、恐龙时代等各种冒险,也经历了许多充满戏剧性的啼笑皆非的日常。

正直​​六一儿童节​​前后,听说大雄和静香也结婚了,我特意写了这篇文章,手把手教大家怎么绘制词云图。

好了,这篇文章是基于​​豆瓣​​​电影评论的​​词云图​​绘制。通过这篇文章,你将会收货:

① 豆瓣电影数据的爬取;② 手把手教你学会词云图的绘制;

豆瓣爬虫步骤

当然,豆瓣上面有很多其他的数据,值得我们爬取后做分析。但是本文我们仅仅爬取评论信息。

待爬取网址:​​​ 1. 导入相关库,用什么库,都写在这里import requestsimport chardetimport 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':'3. 这个循环,类似于翻页操作for i in range(0,1001,20): url = f" # 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('(.*?)',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()方法进行分词;④ 读取停用词,添加额外停用词,并去除停用词;⑤ 词频统计;⑥ 绘制词云图

① 导入相关库

在这里,你需要什么库,就导入什么库。

import jiebafrom wordcloud import WordCloudimport matplotlib.pyplot as pltfrom imageio import imreadimport warningswarnings.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")

结果如下:

从词云图大致可以看出:这又是一部催泪电影,这是一部情怀电影,陪伴我们长大的大雄都结婚了?那我们呢?其实我们小时候,就盼望着大雄和静香能够是好盆友,就在这部电影,他们结婚了。这部电影应该怎么上演呢?大家可以去电影院一探究竟。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:habor-docker-registry
下一篇:Android 中的单元测试 (普通Java类中的Function测试篇)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~