我用Python爬了12萬(wàn)條影評(píng),告訴你《戰(zhàn)狼Ⅱ》都在說(shuō)些啥
截止到 8 月 24 日,《戰(zhàn)狼Ⅱ》上映的第 29 天,它的票房已超 52 億人民幣,真正成為唯一一部挺進(jìn)世界影史票房前 100 名的亞洲電影。
拋開(kāi)爆炸的票房不說(shuō),電影還激起了觀眾各種情緒,甚至有人放狠話說(shuō):敢噴《戰(zhàn)狼Ⅱ》的,要么是智障,要么是公敵,就是這么簡(jiǎn)單粗暴。
大家對(duì)《戰(zhàn)狼Ⅱ》褒貶不一,紛紛在豆瓣短評(píng)上面留言,表達(dá)自己對(duì)這部電影的看法。盡管各路評(píng)論出街,媒體鬧得沸沸揚(yáng)揚(yáng),觀眾還是傻傻分不清楚哪邊意見(jiàn)比較靠譜。
截至目前已經(jīng)有超過(guò)十五萬(wàn)的評(píng)論,在你看評(píng)論的時(shí)候,你可能在一段時(shí)間里看到的大部分是表?yè)P(yáng)或者是貶低的評(píng)論。
那么通過(guò)瀏覽評(píng)論我們很難看出大家對(duì)于這部電影的總體情況?,F(xiàn)在讓我們通過(guò)數(shù)據(jù)分析的方法看看在這些評(píng)論中究竟發(fā)生了什么有趣的事情!
本文通過(guò) Python 爬蟲(chóng)的方式獲取數(shù)據(jù),對(duì)豆瓣電影評(píng)論進(jìn)行分析,制作了豆瓣影評(píng)的云圖。
現(xiàn)在,讓我們來(lái)看看,《戰(zhàn)狼Ⅱ》評(píng)論里到底藏著哪些有趣的潛臺(tái)詞。
數(shù)據(jù)的獲取
本文采用的是 Python 爬蟲(chóng)的方式獲取的數(shù)據(jù),用到的主要是 requests 包與正則包 re,該程序并未對(duì)驗(yàn)證碼進(jìn)行處理。
之前也爬取過(guò)豆瓣的網(wǎng)頁(yè),當(dāng)時(shí)由于爬取的內(nèi)容少,所以并沒(méi)有遇到驗(yàn)證碼的事情。
在寫(xiě)本文爬蟲(chóng)的時(shí)候,原以為也不會(huì)有驗(yàn)證碼,但是當(dāng)爬取到大概 15000 個(gè)評(píng)論的時(shí)候跳出來(lái)驗(yàn)證碼。
然后我就想不就是十二萬(wàn)嗎?最多我也就是輸入大概十幾次驗(yàn)證碼,所以就沒(méi)有處理驗(yàn)證碼的事情。
但是接下來(lái)的事情就有點(diǎn)坑到我了,爬取 15000 左右評(píng)論并輸入驗(yàn)證碼的時(shí)候,我以為會(huì)接下來(lái)爬取到 30000 左右,可是才爬了 3000 左右就不行了,還是要輸驗(yàn)證碼。
然后就一直這樣,跌跌撞撞,有時(shí)候爬取好長(zhǎng)時(shí)間才需要驗(yàn)證碼,有時(shí)候則不是。不過(guò)***還是把評(píng)論爬取下來(lái)了。
爬取的內(nèi)容主要是:用戶名,是否看過(guò),評(píng)論的星星點(diǎn)數(shù),評(píng)論時(shí)間,認(rèn)為有用的人數(shù),評(píng)論內(nèi)容。參看下圖(用戶名已隱藏):
這個(gè)是影評(píng)的起始頁(yè):豆瓣影評(píng)。
以下是 Python 爬蟲(chóng)的代碼:
- import requests
- import re
- import pandas as
- pdurl_first='https://movie.douban.com/subject/26363254/comments?start=0'
- head={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/59.0.3071.109 Chrome/59.0.3071.109 Safari/537.36'}
- html=requests.get(url_first,headers=head,cookies=cookies)
- cookies={'cookie':'你自己的cookie'} #也就是找到你的賬號(hào)對(duì)應(yīng)的cookie
- reg=re.compile(r'<a href="(.*?)&.*?class="next">') #下一頁(yè)
- ren=re.compile(r'<span class="votes">(.*?)</span>.*?comment">(.*?)</a>.*?</span>.*?<span.*?class="">(.*?)</a>.*?<span>(.*?)</span>.*?title="(.*?)"></span>.*?title="(.*?)">.*?class=""> (.*?)\n',re.S) #評(píng)論等內(nèi)容
- while html.status_code==200:
- url_next='https://movie.douban.com/subject/26363254/comments'+re.findall(reg,html.text)[0]
- zhanlang=re.findall(ren,html.text)
- data=pd.DataFrame(zhanlang)
- data.to_csv('/home/wajuejiprince/文檔/zhanlang/zhanlangpinglun.csv', header=False,index=False,mode='a+') #寫(xiě)入csv文件,'a+'是追加模式
- data=[]
- zhanlang=[]
- html=requests.get(url_next,cookies=cookies,headers=head)
以上代碼注意設(shè)置你自己的 User-Agent,Cookie,CSV 保存路徑等。
爬取的內(nèi)容保存成 CSV 格式的文件,保存的文件內(nèi)容如下:
數(shù)據(jù)清洗
本文用 R 語(yǔ)言來(lái)處理數(shù)據(jù),雖然在爬取的時(shí)候已經(jīng)非常注意爬取內(nèi)容的結(jié)構(gòu)了,但是還是不可避免的有一些值不是我們想要的。
比如有的評(píng)論內(nèi)容會(huì)出現(xiàn)在評(píng)論者這一項(xiàng)中,所以還是有必要進(jìn)行一下數(shù)據(jù)的清洗。
首先加載要用到的所有包:
- library(data.table)
- library(plotly)
- library(stringr)
- library(jiebaR)
- library(wordcloud2)
- library(magrittr)
導(dǎo)入數(shù)據(jù)并清洗:
- dt<-fread(file.choose()) #導(dǎo)入數(shù)據(jù)
- dt[,c("V8","V9","V10","V11","V12","V13"):=NULL] #刪除空列
- #一條命令清洗數(shù)據(jù)
- my_dt<-dt[str_detect(贊成評(píng)論數(shù),"\\d+")][評(píng)論有用=='有用'][是否看過(guò)=="看過(guò)"][五星數(shù)%in%c("很差","較差","還行","推薦","力薦")]
數(shù)據(jù)淺析
先來(lái)看一看通過(guò)星星數(shù)評(píng)論的情況:
- plot_ly(my_dt[,.(.N),by=.(五星數(shù))],type = 'bar',x=~五星數(shù),y=~N)
五角星的個(gè)數(shù)對(duì)應(yīng) 5 個(gè)等級(jí),5 顆星代表力薦,4 顆星代表推薦,3 顆星代表還行,2 顆星代表較差,1 顆星代表很差。
通過(guò)五角星的評(píng)論顯而易見(jiàn),我們有理由相信絕大部分觀看者對(duì)這部影片持滿意態(tài)度。
對(duì)評(píng)論結(jié)果的云圖展示
首先我們應(yīng)該先進(jìn)行評(píng)論的分詞:
- wk <- worker()
- sw<-function(x){wk<=x}
- segwords<-lapply(my_dt[,評(píng)論內(nèi)容],sw)
- my_segwords<-unlist(segwords) #不要列表
- #去除停止詞
- st<-readLines(file.choose()) #讀取停止詞
- stopwords<-c(NULL)
- for(i in 1:length(st))
- {
- stopwords[i]<-st[i]
- }
- seg_Words<-filter_segment(my_segwords,stopwords) #去除中文停止詞
總體評(píng)論云圖展示:
- words<-table(seg_Words)%>%data.table()
- setnames(words,"N","pinshu")
- words[pinshu>1000] #去除較低頻數(shù)的詞匯(小于1000的)
- wordcloud2(words[pinshu>1000], size = 2, fontFamily = "微軟雅黑",color = "random-light", backgroundColor = "grey")
由于數(shù)據(jù)太多,導(dǎo)致我的破電腦卡頓,所以在制作云圖的時(shí)候去掉了頻數(shù)低于 1000 的詞匯。
云圖結(jié)果如下:
整體來(lái)看,大家對(duì)這不影片的評(píng)論還是不錯(cuò)呀!劇情,動(dòng)作,愛(ài)國(guó)等話題是大家談?wù)摰慕裹c(diǎn)。
評(píng)價(jià)關(guān)鍵詞:吳京、個(gè)人英雄主義、主旋律、中國(guó)、主角光環(huán)、達(dá)康書(shū)記、很燃。
可見(jiàn),“燃”并不是看完之后的最多反饋,觀眾更多是對(duì)吳京本人的贊嘆,以及對(duì)愛(ài)國(guó)主義和個(gè)人主義的評(píng)價(jià)。
不同評(píng)論等級(jí)的云圖展示
但是如果把不同評(píng)價(jià)的人的評(píng)論分別展示會(huì)是什么樣子呢?也就是對(duì)五個(gè)等級(jí)(力薦,推薦,還行,較差,很差)的評(píng)論內(nèi)容制作云圖,代碼如下(只要改變代碼中力薦為其他即可):
力薦的評(píng)論人的評(píng)論云圖
推薦的評(píng)論人的評(píng)論云圖
還行的評(píng)論人的評(píng)論云圖
較差的評(píng)論人的評(píng)論云圖
很差的評(píng)論人的評(píng)論云圖
結(jié)論
從不同的評(píng)論的分詞結(jié)果來(lái)看,他們都有一個(gè)共同的話題:愛(ài)國(guó)。
在力薦的評(píng)論中可能愛(ài)國(guó)話題的基數(shù)比很差的評(píng)論中的多,在力薦的評(píng)論中人們更愿意討論的是愛(ài)國(guó)話題之外的事情。在很差的評(píng)論中人們討論的大多是愛(ài)國(guó)話題。而且他們占的比例很有意思,從力薦的人到評(píng)論很差的人,愛(ài)國(guó)話題的比例逐漸增加。
我們不能主觀的認(rèn)為誰(shuí)對(duì)誰(shuí)錯(cuò),只能說(shuō)他們站在的角度不一樣,所以看到的結(jié)果也不太一樣。當(dāng)我們和別人意見(jiàn)不同時(shí),往往是所處的角度不同。評(píng)論很差的人考慮的更多的是愛(ài)國(guó)的話題吧(這里只是愛(ài)國(guó)話題的討論,并不是誰(shuí)愛(ài)不愛(ài)國(guó))!!
分析完了,這部《戰(zhàn)狼2》之所以能獲得這么多人的支持,根本原因還是在于從制作上實(shí)現(xiàn)了《戰(zhàn)狼1》所沒(méi)有的美國(guó)大片級(jí)大場(chǎng)面,同時(shí)在愛(ài)國(guó)主義上引起了共鳴,激起了民心。
電影結(jié)尾預(yù)告了《戰(zhàn)狼3》,我想必然會(huì)是一部更成功的電影,50 億的票房預(yù)示著吳京在 3 上容易吸引更豐厚的資本投資。
投資多了意味著特效也會(huì)更牛逼,而《戰(zhàn)狼2》里劇情上還有很大的進(jìn)步空間,更有深度的劇情+更炫的畫(huà)面+愛(ài)國(guó)主義+個(gè)人英雄主義+吳京口碑,《戰(zhàn)狼3》絕對(duì)上天。