
大年初一《流浪地球》全國(guó)上映。在豆瓣評(píng)分上,首日開(kāi)分站穩(wěn)8分以上,延續(xù)了之前點(diǎn)映的高口碑。微博上跟著出現(xiàn)吳京客串31天與投資6000萬(wàn)的熱搜。知乎上關(guān)于“如何評(píng)價(jià)劉慈欣小說(shuō)改編的同名電影《流浪地球》”的回答引起了眾多人關(guān)注,包括該片導(dǎo)演郭帆的最高贊回答。
本篇文章爬取了豆瓣網(wǎng)上《流浪地球》的部分影評(píng),并進(jìn)行數(shù)據(jù)分析及可視化處理。下面是爬取分析的整個(gè)過(guò)程,讓我們愉快開(kāi)始吧!
一、網(wǎng)頁(yè)分析
豆瓣網(wǎng)從2017年10月開(kāi)始全面禁止爬取數(shù)據(jù)。在非登錄狀態(tài)下僅僅可以爬取200條短評(píng),登錄狀態(tài)下僅可以爬取500條數(shù)據(jù)。白天一分鐘最多可爬40次,晚上60次,超過(guò)次數(shù)就會(huì)封IP地址。小本聰爬取數(shù)據(jù)獲得400條時(shí)被封了IP,賬號(hào)被強(qiáng)制下線封號(hào),之后發(fā)短信賬號(hào)恢復(fù),因此不建議多次爬?。硗?,有很多解決方法,請(qǐng)自行搜索)。
獲取對(duì)象
評(píng)論用戶
評(píng)論內(nèi)容
評(píng)分
評(píng)論日期
用戶所在城市
值得注意的是,在地址欄我們會(huì)發(fā)現(xiàn)電影名字的ID編號(hào)為26266893(其他電影只需更換ID即可),并且每頁(yè)有20條短評(píng),因此我爬取了20頁(yè)。評(píng)論頁(yè)面沒(méi)有用戶所在城市,需要進(jìn)入用戶頁(yè)面獲取信息。
二、數(shù)據(jù)獲取與存儲(chǔ)
1?獲取cookies
小本聰用的是Chrome瀏覽器,Ctrl+F12進(jìn)入開(kāi)發(fā)者工具頁(yè)面。F5刷新一下出現(xiàn)數(shù)據(jù),找到cookies、headers。
2 加載headers、cookies,并用requests庫(kù)獲取信息

3 解析需求數(shù)據(jù)
此處運(yùn)用xpath解析。發(fā)現(xiàn)有的用戶雖然給了評(píng)論,但是沒(méi)有給評(píng)分,所以score和date這兩個(gè)的xpath位置是會(huì)變動(dòng)的。因此需要加判斷,如果發(fā)現(xiàn)score里面解析的是日期,證明該條評(píng)論沒(méi)有給出評(píng)分。
foriinrange(1,21):#?每頁(yè)20個(gè)評(píng)論用戶
name?=?x.xpath('//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/a/text()'.format(i))
#?下面是個(gè)大bug,如果有的人沒(méi)有評(píng)分,但是評(píng)論了,那么score解析出來(lái)是日期,而日期所在位置spen[3]為空

4 獲取電影名稱
從url上只能獲取電影的subject的8位ID數(shù)值,引起需要自行解析網(wǎng)頁(yè)獲取ID號(hào)對(duì)應(yīng)的電影名稱,該功能是后期改進(jìn)添加的,因此為避免現(xiàn)有代碼改動(dòng)多(偷個(gè)懶),采用了全局變量賦值給movie_name,需要注意全局變量調(diào)用時(shí),要加global聲明一下。

5 數(shù)據(jù)存儲(chǔ)
由于數(shù)據(jù)不多,選擇CSV存儲(chǔ)即可。

三、數(shù)據(jù)分析與可視化
1?獲取cookies
城市信息篩選中文字

匹配pyecharts支持的城市列表

2 基于snownlp的情感分析
snownlp主要可以進(jìn)行中文分詞(算法是Character-Based Generative Model)、詞性標(biāo)注(原理是TnT、3-gram 隱馬)、情感分析(官網(wǎng)木有介紹原理,但是指明購(gòu)物類的評(píng)論的準(zhǔn)確率較高,其實(shí)是因?yàn)樗恼Z(yǔ)料庫(kù)主要是購(gòu)物方面的,可以自己構(gòu)建相關(guān)領(lǐng)域語(yǔ)料庫(kù),替換原來(lái)的,準(zhǔn)確率也挺不錯(cuò)的)、文本分類(原理是樸素貝葉斯)、轉(zhuǎn)換拼音、繁體轉(zhuǎn)簡(jiǎn)體、提取文本關(guān)鍵詞(原理是TextRank)、提取摘要(原理是TextRank)、分割句子、文本相似(原理是BM25)【摘自CSDN】。在看此之前,建議先看一下官網(wǎng),里面有最基礎(chǔ)的一些命令的介紹。官網(wǎng)鏈接:https://pypi.org/project/snownlp/
由于snownlp全部是unicode編碼,所以要注意數(shù)據(jù)是否為unicode編碼。因?yàn)槭莡nicode編碼,所以不需要去除中文文本里面含有的英文,因?yàn)槎紩?huì)被轉(zhuǎn)碼成統(tǒng)一的編碼上面只是調(diào)用snownlp原生語(yǔ)料庫(kù)對(duì)文本進(jìn)行分析,snownlp重點(diǎn)針對(duì)購(gòu)物評(píng)價(jià)領(lǐng)域,所以為了提高情感分析的準(zhǔn)確度可以采取訓(xùn)練語(yǔ)料庫(kù)的方法。

3 評(píng)論來(lái)源城市分析
調(diào)用pyecharts的page函數(shù),可以在一個(gè)圖像對(duì)象中創(chuàng)建多個(gè)chart,只需要對(duì)應(yīng)的add即可。

4 影片情感分析
0.5以下為負(fù)面情緒,0.5以上為正面情緒??梢钥吹胶迷u(píng)還是很不錯(cuò)的,至于豆瓣上一些看衰評(píng)論只是少數(shù)。
5 電影評(píng)分走勢(shì)分析
讀取csv文件,以dataframe(df)形式保存
遍歷df行,保存到list
統(tǒng)計(jì)相同日期相同評(píng)分的個(gè)數(shù)
轉(zhuǎn)換為df格式,設(shè)置列名
按日期排序
遍歷新的df,每個(gè)日期的評(píng)分分為5種,因此需要插入補(bǔ)充缺失數(shù)值。

由于允許爬取的量少和時(shí)間問(wèn)題,部分?jǐn)?shù)據(jù)不是很明顯。但依然可以得出一些發(fā)現(xiàn)。在影片上映開(kāi)始的一周內(nèi),為評(píng)論高峰,尤其是上映3天內(nèi),這符合常識(shí),但是也可能有偏差,因?yàn)榕老x(chóng)獲取的數(shù)據(jù)是經(jīng)過(guò)豆瓣電影排序的,倘若數(shù)據(jù)量足夠大得出的趨勢(shì)可能更接近真實(shí)情況。
另外發(fā)現(xiàn),影片在上映前也有部分評(píng)論,分析可能是影院公映前的小規(guī)模試映,且這些提前批的用戶的評(píng)分均值,差不多接近影評(píng)上映后的大規(guī)模評(píng)論的最終評(píng)分 ,從這些細(xì)節(jié)中,我們或許可以猜測(cè),這些能提前觀看影片的,可能是資深影迷或者影視從業(yè)人員,他們的評(píng)論有著十分不錯(cuò)的參考價(jià)值。
6 影評(píng)詞云圖
詞云圖制作時(shí),先讀取CSV文件一dataframe形式保存,去除評(píng)論中非中文文本,選了胡歌照片作為背景,并設(shè)置了停用詞表。

可以看到高頻詞“可以”表現(xiàn)出對(duì)該片的認(rèn)可,“特效”體現(xiàn)出特效鏡頭對(duì)科幻片的重要性,“科幻電影”體現(xiàn)出影迷對(duì)科幻類電影的濃厚興趣。
以上就是本次爬取豆瓣網(wǎng)《流浪地球》短評(píng)的過(guò)程與數(shù)據(jù)分析。
微信公眾號(hào)“學(xué)編程的金融客”后臺(tái)回復(fù)“流浪地球”即可獲得源碼。
如果您想提升自己,也歡迎加入我的知識(shí)星球:金融&編程研習(xí)社?,里面有更多資料、Python數(shù)據(jù)分析、金融、區(qū)塊鏈等干貨分享,當(dāng)然,還能賺小錢!