《邪不壓正》究竟算不算好電影?通過(guò)爬取豆瓣上萬(wàn)條影評(píng)告訴你
暑期是學(xué)生放假的時(shí)候,也是院線(xiàn)神仙打架的時(shí)候,各色電影亮相大熒屏,高潮迭起,好不精彩。
今年的暑期《我不是藥神》一騎絕塵,而姜文的《邪不壓正》卻褒貶不一,雖然上映當(dāng)天豆瓣評(píng)分便由8.2跌到7.1,但單日票房卻依舊過(guò)億。
作為掌握技術(shù)Pythoner,我們除了關(guān)注彭于晏的屁股,還應(yīng)該關(guān)注許晴的臀部,啊不是,應(yīng)該透過(guò)現(xiàn)象去看清本質(zhì)。
那么咱們來(lái)通過(guò)爬取豆瓣影評(píng)獲取數(shù)據(jù)進(jìn)行分析。
數(shù)據(jù)的獲取
對(duì)于數(shù)據(jù)的獲取,本文采用的是Python爬蟲(chóng)的方式獲取的數(shù)據(jù)。用到的主要是requests包與正則包re。(注意:該程序并未對(duì)驗(yàn)證碼進(jìn)行處理。爬取內(nèi)容少不會(huì)遇到驗(yàn)證碼,但上萬(wàn)評(píng)論可能會(huì)跳出驗(yàn)證碼)
爬取的內(nèi)容主要是:用戶(hù)名,是否看過(guò),評(píng)論的星星點(diǎn)數(shù),評(píng)論時(shí)間,認(rèn)為有用的人數(shù),評(píng)論內(nèi)容。參看下圖(用戶(hù)名已隱藏):
以下是Python爬蟲(chóng)的代碼:
- import requests
- import re
- import pandas as pd
- url_first='https://movie.douban.com/subject/26366496/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'}
- cookies={'cookie':'你自己的cookie'} #也就是找到你的賬號(hào)對(duì)應(yīng)的cookie
- html=requests.get(url_first,headers=head,cookies=cookies) reg=re.compile(r'<a href="(.*?)&.*?class="next">') #下一頁(yè)
- ren=re.compile(r'<span>(.*?)</span>.*?comment">(.*?)</a>.*?</span>.*?<span.*?class="">(.*?)</a>.*?<span>(.*?)</span>.*?title="(.*?)"></span>.*?title="(.*?)">.*?class=""> (.*?) ',re.S) #評(píng)論等內(nèi)容
- while html.status_code==200: url_next='https://movie.douban.com/subject/26366496/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格式的文件,如下所示:
數(shù)據(jù)的處理
雖然在爬取的時(shí)候已經(jīng)非常注意爬取內(nèi)容的結(jié)構(gòu)了,但是還是不可避免的有一些值不是我們想要的,比如有的評(píng)論內(nèi)容會(huì)出現(xiàn)在評(píng)論者這一項(xiàng)中。比如評(píng)論重復(fù),所以還是首先有必要進(jìn)行一下數(shù)據(jù)的清洗。
接下來(lái)就可以進(jìn)行數(shù)據(jù)淺析,比如通過(guò)星星數(shù)判定評(píng)論質(zhì)量:
- plot_ly(my_dt[,.(.N),by=.(五星數(shù))],type = 'bar',x=~五星數(shù),y=~N)
對(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ù)太多,防止卡頓,所以在制作云圖的時(shí)候去掉了頻數(shù)低于1000的詞匯。
云圖結(jié)果如下:
可以看出,排名靠前的熱詞分別是姜文、不錯(cuò)、好看、彭于晏、劇情、看不懂等,評(píng)論確實(shí)是五花八門(mén),當(dāng)然這也是姜文電影的特點(diǎn)吧。
最后送大家一張希臘雕塑般美好的肉體福利