尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
春節時,在家閒著無聊,刷了一部電視劇。
即「大江大河」,豆瓣評分8.9分。
主要講述了1978到1992年間改革開放的大背景下。
以宋運輝、雷東寶、楊巡為代表的先行者們在變革浪潮中不斷探索和突圍的浮沉故事。
總的來說是一部很不錯的電視劇。
恰巧那時在B站看完了吳曉波2018年的跨年演講。
里面提到了,如果你是一個1978年的中國青年,有可能需要按下一個血手印。
故事來源於18個安徽鳳陽小崗村農民的分田計劃。
我覺得「大江大河」就很好的展現出了那個時代的現狀。
農村改革的先行者東寶書記,知識改變命運的宋運輝,個體經營打拼的小楊巡。
都有著自己的人生,去闡述那個時代的點滴。
這也是吸引我繼續觀看這部電視劇的原因。
去了解那個時代的青年,他們對體制的突破以及改變自己過去的勇氣。
然後結合最近「流浪地球」豆瓣電影短評的差評的現象。
我也爬取了「大江大河」的豆瓣短評。
來看看有什麼貓膩沒有。
在此需要感謝一下2808PROXY提供的代理服務。
如果沒有他們的支持,我是肯定獲取不到用戶註冊信息的。
因為豆瓣的反爬實在是厲害。
即使我用了穩定的代理,豆瓣還是針對我的Cookie進行了封鎖。
假想我沒有用代理的話,估摸著也就只有涼涼二字。
/ 01 / 網頁分析
雖然評論有兩萬多條,但是豆瓣在登陸的情況下,也只是放出500條數據。
本次只獲取全部評論以及差評評論標籤頁下的數據,合計約為900多條。
然後便是獲取用戶的註冊時間。
900多個用戶,900多個請求。
我相信不用代理,絕對Game Over。
/ 02 / 數據獲取
評論及用戶信息獲取的代碼如下。
importtimeimportrequestsimportproxy2808frombs4importBeautifulSoupUSERNAME='用戶名'PASSWORD='密碼'headers={'Cookie':'你的Cookie值','User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36'}defget_comments(page,proxy_url_secured):"""評論獲取"""#熱門評論獲取url='https://movie.douban.com/subject/26797690/comments?start='+str(page)+'&limit=20&sort=new_score&status=P'#好評獲取#url='https://movie.douban.com/subject/26797690/comments?start='+str(page)+'&limit=20&sort=new_score&status=P&percent_type=h'#一般評論獲取#url='https://movie.douban.com/subject/26797690/comments?start='+str(page)+'&limit=20&sort=new_score&status=P&percent_type=m'#差評獲取#url='https://movie.douban.com/subject/26797690/comments?start='+str(page)+'&limit=20&sort=new_score&status=P&percent_type=l'#使用2808proxy代理response=requests.get(url=url,headers=headers,proxies={'http':proxy_url_secured,'https':proxy_url_secured})soup=BeautifulSoup(response.text,'html.parser')fordivinsoup.find_all(class_='comment-item'):time.sleep(3)#評論信息comment_info=div.find(class_='comment-info')#用戶名user_name=comment_info.find('a').get_text()print(user_name)#用戶主頁地址user_url=comment_info.find('a').attrs['href']print(user_url)#獲取用戶註冊時間,看水軍必備registered_time=get_user(user_url,proxy_url_secured)print(registered_time)#用戶評分score=comment_info.find_all('span')[1].attrs['class'][0][-2:-1]print(score)#用戶評價eva=comment_info.find_all('span')[1].attrs['title']print(eva)#有用數useful_num=div.find(class_='votes').get_text()print(useful_num)#評價日期date=comment_info.find(class_='comment-time').attrs['title'].split('')[0]print(date)#評價時間comment_time=comment_info.find(class_='comment-time').attrs['title'].split('')[1]print(comment_time)#用戶評論comment=div.find(class_='short').get_text().replace('\n','').strip().replace(',',',').replace('','')print(comment)#寫入csv文件withopen('comments_douban_l.csv','a',encoding='utf-8-sig')asf:f.write(user_name+','+user_url+','+registered_time+','+score+','+date+','+comment_time+','+useful_num+','+comment+'\n')f.close()defget_user(user_url,proxy_url_secured):"""獲取用戶註冊時間"""#使用2808proxy代理response=requests.get(url=user_url,headers=headers,proxies={'http':proxy_url_secured,'https':proxy_url_secured})soup=BeautifulSoup(response.text,'html.parser')user_message=soup.find(class_='basic-info')#獲取用戶註冊時間try:user_registered=user_message.find(class_='pl')registered_time=user_registered.get_text().split('')[1].replace('加入','')except:registered_time='unknow'returnregistered_timedefmain():num=0foriinrange(0,500,20):cli=proxy2808.Client(username=USERNAME,password=PASSWORD)cli.release_all()p=cli.get_proxies(amount=1,expire_seconds=300)[0]proxy_url_secured="%s://%s:%s@%s:%d"%('http',USERNAME,PASSWORD,p['ip'],p['http_port_secured'])print(proxy_url_secured)get_comments(i,proxy_url_secured)num+=1if__name__=='__main__':main()
獲取全部評論標籤頁下的數據(500條)。
紅框部分為用戶的註冊時間。
假設我能爬取所有評論,那麼水軍可能要被我逮到了。
個人理解,水軍就是過多的新註冊用戶…
然而豆瓣並沒有給我們這個機會。
獲取差評標籤頁的數據(482條)。
看看給差評的用戶註冊時間。
相較好評的用戶註冊時間,有那麼點意思了。
註冊時間相對都比較晚。
難不成豆瓣真有水軍…
差評水軍,我勸你善良。
/ 03 / 情感分析
評論的情感分析使用百度的自然語言處理。
下面利用網站做個示例。
具體的可以去官網看文檔,這里只是簡述一番。
通過你的百度帳號登陸百度的AI開發平台,新建自然語言處理項目。
獲取「API Key」及「Secret Key」後。
調用情感傾向分析接口,得到情感結果。
importurllib.requestimportpandasimportjsonimporttimedefget_access_token():"""獲取百度AI平台的AccessToken"""#使用你的APIKey及SecretKeyhost='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[APIKey]&client_secret=[SecretKey]'request=urllib.request.Request(host)request.add_header('Content-Type','application/json;charset=UTF-8')response=urllib.request.urlopen(request)content=response.read().decode('utf-8')rdata=json.loads(content)returnrdata['access_token']defsentiment_classify(text,acc):"""獲取文本的感情偏向(消極or積極or中立)參數:text:str本文"""raw={"text":"內容"}raw['text']=textdata=json.dumps(raw).encode('utf-8')#情感傾向分析接口host="https://aip.baidubce.com/rpc/2.0/nlp/v1/sentiment_classify?charset=UTF-8&access_token="+accrequest=urllib.request.Request(url=host,data=data)request.add_header('Content-Type','application/json')response=urllib.request.urlopen(request)content=response.read().decode('utf-8')rdata=json.loads(content)returnrdata#獲取access_tokenaccess_token=get_access_token()#差評標籤df=pandas.read_csv('comments_douban_l.csv',header=None,names=['user_name','user_url','registered_time','score','date','comment_time','useful_num','comment'])#好評標籤#df=pandas.read_csv('comments_douban_a.csv',header=None,names=['user_name','user_url','registered_time','score','date','comment_time','useful_num','comment'])#輸出情感極性分類結果,0:負向,1:中性,2:正向sentiments=[]fortextindf['comment']:time.sleep(1)result=sentiment_classify(str(text),access_token)value=result['items'][0]['sentiment']sentiments.append(value)#print(result)print(result['items'][0]['sentiment'],text)#添加評分列及情感列df['score1']=df['score']df['emotional']=sentiments#差評標籤df.to_csv('comments_douban_ll.csv',header=0,index=False,encoding='utf-8-sig')#好評標籤#df.to_csv('comments_douban_al.csv',header=0,index=False,encoding='utf-8-sig')
情感分析結果如下。
總的來說5星評分的結果多為正向(2)的。
當然也出現了一些負向(0)的結果。
不過還是在可接受範圍內。
沒什麼大影響。
1星評分的評論情感傾向多為負向。
這里把正向的用紅框圈出來了,大家可以自行體會。
畢竟機器的識別水平有限,想達到100%識別,可能性幾乎為0。
這就好比語文試卷拿滿分,聞所未聞。
總而言之,百度這個情感傾向分析,很不錯。
/ 04 / 數據可視化
01 評論日期分布情況
熱評隨著電視劇的開播,便慢慢沒有什麼變化。
而差評卻在後頭有一些波動。
假設我們能夠獲取到差評有異常時所有的用戶註冊時間。
那麼便能看是否真的有水軍存在。
當然此處僅僅是一個假想而已,豆瓣早已把你我拒之門外。
02 評論時間分布情況
大部分評論都是在晚上評論的,符合常態。
估摸著晚上都是大家的娛樂時間,便有了閒情逸致去寫評論。
03 評論評分情況
全部短評的5星評分占大頭。
全部差評的1星和2星占大頭。
這對得起豆瓣的8.9分了。
04 評論情感分析情況
其中「2」代表積極的,「1」代表中性的,「-2」代表消極的。
全部短評的正向結果占大頭。
全部短評的排序是基於點讚數而來的。
所以對於整部劇,大家還是比較認可的。
全部差評的負向結果占大頭。
給了差評,情感傾向果斷差了。
05 評論用戶註冊時間
由於數據比較少,所以大家看著樂呵就好。
要想判斷出有水軍還是有難度的。
06 評論詞雲
好評詞雲。
充滿了滿滿的正能量。
差評詞雲。
「看不下去」「失望」「惡心」「難看」,體現了大家對於這部劇的負面評價。
/ 05 / 總結
文章源碼及相關文件已上傳「GitHub」。
點擊左下角閱讀原文,即可獲取。
萬水千山總是情,點個「好看」行不行。
推薦閱讀
··· END ···
支持小F原創☟