Python爬取哆啦A夢-伴我同行2豆瓣影評并生成詞云圖
一、前言
通過這篇文章,你將會收貨:
① 豆瓣電影數(shù)據(jù)的爬取;
② 手把手教你學(xué)會詞云圖的繪制;
二、豆瓣爬蟲步驟
當(dāng)然,豆瓣上面有很多其他的數(shù)據(jù),值得我們爬取后做分析。但是本文我們僅僅爬取評論信息。
待爬取網(wǎng)址:
https://movie.douban.com/subject/34913671/comments?status=P
由于只有一個(gè)字段,我們直接使用re正則表達(dá)式,解決該問題。
那些爬蟲小白看過來,這又是一個(gè)你們練手的好機(jī)會。
下面直接為大家講述爬蟲步驟:
# 1. 導(dǎo)入相關(guān)庫,用什么庫,都寫在這里 import requests import chardet import re # 2. 構(gòu)造請求頭,這是一個(gè)反扒措施,初期學(xué)會總結(jié),哪些網(wǎng)站都用了哪些,總結(jié)多了,用起來就得心應(yīng)手。 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', #在爬蟲里面如果出現(xiàn)了Referer最好也粘上去,因?yàn)橛袝r(shí)候服務(wù)器會根據(jù)Referer來判斷請求時(shí)由瀏覽器還是爬蟲發(fā)出的 'Referer':'https://www.douban.com/' } # 3. 這個(gè)循環(huán),類似于翻頁操作 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庫發(fā)起請求 response = requests.get(url,headers=headers)#發(fā)起請求得到響應(yīng) # 5. 有時(shí)候返回結(jié)果可能會亂碼,這里記得調(diào)用encoding屬性,修改編碼 response.encoding = "utf-8" # 6. 獲取返回的結(jié)果,調(diào)用的是text屬性。一定要區(qū)分text和content屬性的區(qū)別 text = response.text#返回一個(gè)經(jīng)過解碼的字符串 # 7. 解析數(shù)據(jù),這里直接使用正則解析 comments_list = [i for i in re.findall('<span class="short">(.*?)</span>',text,re.S)] # 8. 數(shù)據(jù)存儲,針對列表中的每一條數(shù)據(jù),我們直接使用open()函數(shù),寫入到txt文檔 for comment in comments_list: with open(r"哆啦A夢:伴我同行2.txt","a",encoding = "utf-8") as f : f.write(comment + "\n")
三、最終效果如下
四、詞云圖制作流程
很多同學(xué)不會制作詞云圖,借此機(jī)會,我這里寫一套詳細(xì)的流程,大家照貓畫虎
就行。
繪制詞云圖的詳細(xì)步驟如下:
- ① 導(dǎo)入相關(guān)庫;
- ② 讀取文本文件,使用jieba庫動態(tài)修改詞典;
- ③ 使用jieba庫中的lcut()方法進(jìn)行分詞;
- ④ 讀取停用詞,添加額外停用詞,并去除停用詞;
- ⑤ 詞頻統(tǒng)計(jì);
- ⑥ 繪制詞云圖
① 導(dǎo)入相關(guān)庫
在這里,你需要什么庫,就導(dǎo)入什么庫。
import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt from imageio import imread import warnings warnings.filterwarnings("ignore")
② 讀取文本文件,使用jieba庫動態(tài)修改詞典
這里with open()讀取文本文件,我就不解釋了。這里解釋一下動態(tài)修改詞典
。
sentence = "湖北廣水第三條街,有一條狗" list(jieba.cut(sentence))
結(jié)果如下:
針對上述切分結(jié)果,如果我們想把“湖北廣水”和“第三條街”都當(dāng)成一個(gè)完整詞,而不切分開,怎么辦呢?此時(shí),就需要借助add_word()方法,動態(tài)修改詞典。
sentence = "湖北廣水第三條街,有一條狗" jieba.add_word("湖北廣水") jieba.add_word("有一條狗") list(jieba.cut(sentence))
結(jié)果如下:
總結(jié):
- jieba.add_word()方法,只能一個(gè)個(gè)動態(tài)添加某個(gè)詞語。
- 假如我們需要動態(tài)添加多個(gè)詞語的時(shí)候,就需要使用jieba.load_userdict()方法。也就是說:將所有的自定義詞語,放到一個(gè)文本中,然后使用該方法,一次性動態(tài)修改詞典集。
有了上述基礎(chǔ),我們直接讀取文本后,動態(tài)修改詞典。
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()方法進(jìn)行分詞
短短的一行代碼,很簡單。
data_cut = [jieba.lcut(x) for x in txt]
④ 讀取停用詞,添加額外停用詞,并去除停用詞
讀取停用詞,采用split()函數(shù)切分后,會得到一個(gè)停用詞列表
。接著,采用+號
將額外停用詞,添加到列表中即可。
# 讀取停用詞 with open(r"stoplist.txt",encoding="utf-8") as f: stop = f.read() stop = stop.split() # 額外添加停用詞,這里我們只添加了一個(gè)空格 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])
⑤ 詞頻統(tǒng)計(jì)
這里注意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、設(shè)置詞云參數(shù) 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")
五、效果圖
從詞云圖大致可以看出:這又是一部催淚電影,這是一部情懷電影,陪伴我們長大的大雄都結(jié)婚了?那我們呢?其實(shí)我們小時(shí)候,就盼望著大雄和靜香能夠是好盆友,就在這部電影,他們結(jié)婚了。這部電影應(yīng)該怎么上演呢?大家可以去電影院一探究竟。
到此這篇關(guān)于Python爬取哆啦A夢-伴我同行2豆瓣影評并生成詞云圖的文章就介紹到這了,更多相關(guān)Python爬取影評并生成詞云圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
tensorflow求導(dǎo)和梯度計(jì)算實(shí)例
今天小編就為大家分享一篇tensorflow求導(dǎo)和梯度計(jì)算實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01scrapy-redis源碼分析之發(fā)送POST請求詳解
這篇文章主要給大家介紹了關(guān)于scrapy-redis源碼分析之發(fā)送POST請求的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用scrapy-redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python django搭建layui提交表單,表格,圖標(biāo)的實(shí)例
今天小編就為大家分享一篇Python django搭建layui提交表單,表格,圖標(biāo)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11pandas實(shí)現(xiàn)對一列/多列進(jìn)行數(shù)據(jù)區(qū)間篩選
這篇文章主要介紹了pandas實(shí)現(xiàn)對一列/多列進(jìn)行數(shù)據(jù)區(qū)間篩選方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02新年快樂! python實(shí)現(xiàn)絢爛的煙花綻放效果
這篇文章主要為大家詳細(xì)介紹了python利用可視化技巧實(shí)現(xiàn)煙花綻放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01Python中你應(yīng)該知道的一些內(nèi)置函數(shù)
python提供了內(nèi)聯(lián)模塊buidin,該模塊定義了一些軟件開發(fā)中常用的函數(shù),這些函數(shù)實(shí)現(xiàn)了數(shù)據(jù)類型的轉(zhuǎn)換,數(shù)據(jù)的計(jì)算,序列的處理等功能。下面這篇文章主要給大家介紹了Python中一些大家應(yīng)該知道的內(nèi)置函數(shù),文中總結(jié)的非常詳細(xì),需要的朋友們下面來一起看看吧。2017-03-03