《中餐厅》弹幕数据分析,我不要你觉得,我只要我觉得!
這段時(shí)間奇怪了,周圍朋友都愛上了同一個(gè)口頭禪“我不要你覺得,我只要我覺得”;我就納悶了漢語文字那么多,你們偏偏都愛上了同一句,我懷疑他們?cè)谕婀?#xff0c;果不其然,在B站的鬼畜區(qū)了解到了真相。
綠大暗僅憑一己之力,將綜藝節(jié)目《中餐廳3》推上了熱門,成為了本季度當(dāng)之無愧的綜藝之王,“我不要你覺得,我只要我覺得”,“別說話,聽我的”等是綠大暗的經(jīng)典名言,這些名言被稱為“明學(xué)”,甚至隱隱與“六學(xué)”齊名,兩開花。
對(duì)一部視頻作品,如果說評(píng)論是觀眾觀看后的沉思,那么彈幕就是吃瓜群眾情感的實(shí)時(shí)流露,為了一窺“明學(xué)”的真諦,我打算爬一爬《中餐廳3》的彈幕數(shù)據(jù),做一個(gè)情感分析。
廢話不多說,“起鍋燒油”
一、分析網(wǎng)頁爬數(shù)據(jù)
1.確認(rèn)加載方式
《中餐廳3》在芒果TV獨(dú)播,打開Chrome瀏覽器,訪問第1集的鏈接https://www.mgtv.com/b/330026/6086563.html,通過禁用頁面javaScript發(fā)現(xiàn)頁面視頻和彈幕都無法加載,并且右鍵-查看頁面源碼,搜索不到彈幕的文字,說明數(shù)據(jù)是異步加載的
2.抓包分析
打開剛剛關(guān)閉的javaScript,重新加載頁面,F12打開開發(fā)者工具,仔細(xì)查找XHR或JS最終在js中找到了彈幕數(shù)據(jù),鏈接是這樣的
https://galaxy.bz.mgtv.com/rdbarrage?version=2.0.0&vid=6086563&abroad=0&pid=&os=&uuid=&deviceid=&cid=330026&ticket=&time=60102&mac=&platform=0&callback=jsonp_1568127366004_84552
彈幕數(shù)據(jù)是json格式,但是偽裝成了jQuery藏在JS里面。
3.鏈接分析
從抓包的地址看,彈幕的真實(shí)請(qǐng)求地址是https://galaxy.bz.mgtv.com/rdbarrage?,其后是一堆相關(guān)的參數(shù),相關(guān)的參數(shù)見下圖
上圖中許多參數(shù)字段是沒有值的,所以我們?cè)囍?jiǎn)化請(qǐng)求地址鏈接,最終發(fā)現(xiàn)https://galaxy.bz.mgtv.com/rdbarrage?vid=6086563&cid=330026&time=60102仍然可以請(qǐng)求成功,也就是說只保留vid,cid.time3個(gè)參數(shù)就可以了
接下來分析vid,cid.time這3個(gè)參數(shù)
首先我們把前3期的url列出來
第1期:https://www.mgtv.com/b/330026/6086563.html
第2期:https://www.mgtv.com/b/330026/6128068.html
第3期:https://www.mgtv.com/b/330026/6168375.html
發(fā)現(xiàn)上述url中330026沒有變化,只有后面的一串文字發(fā)生了變化,通過和下圖中參數(shù)對(duì)比,發(fā)現(xiàn)url中第一個(gè)不變的數(shù)字串就是我們要尋找的vid,而后面的數(shù)字串就是cid,不難看出,vid是“中餐廳3”在芒果TV平臺(tái)中的編號(hào),而cid是中餐廳3不同期數(shù)的編號(hào)。
那么參數(shù)time是什么?
首先通過time英文的本身來看,她是一個(gè)和時(shí)間有關(guān)系的變量,那么可以有以下猜測(cè)
https://galaxy.bz.mgtv.com/rdbarrage?vid=6086563&cid=330026&time=120083中的time值修改為120000,然后再次請(qǐng)求數(shù)據(jù),發(fā)現(xiàn)仍然可以成功請(qǐng)求到對(duì)應(yīng)的數(shù)據(jù)
上圖中在next參數(shù)的旁邊還有個(gè)參數(shù)interval,她的英文意思是“間隔,間距”,而彈幕的time值依次是60000、120000、180000….,差值為60000,所以推測(cè)next=1000*interval,所以很有可能next的單位是ms,而interval的單位是s。為了驗(yàn)證猜想,我們把視頻進(jìn)度條拉到最后,本期的視頻長(zhǎng)度為104.01分鐘,而最后一條彈幕的next為6240000,6240000ms轉(zhuǎn)化為分鐘剛好是104min,驗(yàn)證成立:time是每條彈幕開始播放的時(shí)間。至此所有的參數(shù)都已經(jīng)搞清楚了
二、爬取數(shù)據(jù)
采用request請(qǐng)求數(shù)據(jù),導(dǎo)入我們需要調(diào)用的包import?requestsimport?json?
import?pandas?as?pd
import?time
首先定義一個(gè)主函數(shù)用來獲取每條彈幕js文件的內(nèi)容,并將獲得的數(shù)據(jù)轉(zhuǎn)化為json格式。傳入的參數(shù)time_zimu是每條彈幕開始播放的時(shí)間def?main(time_zimu):
????url='https://galaxy.bz.mgtv.com/rdbarrage?vid=6337608&cid=330026&time='+str(time_zimu)
????html=requests.get(url,headers=headers)
????html.encoding="utf-8"
????html_data=html.text[html.text.find('['):-2]
????html_data_json=json.loads(html_data)
這需要注意一點(diǎn),因?yàn)槲覀円@取的json數(shù)據(jù)是在jQuery中,為了避免出錯(cuò),我們這里直接獲取json部分的數(shù)據(jù)html_data=html.text[html.text.find('['):-2],效果如下圖將數(shù)據(jù)轉(zhuǎn)為json格式后,其中type,uid,content,time是我們想要的數(shù)據(jù)構(gòu)造獲取彈幕信息函數(shù),傳入json的數(shù)據(jù)orgin_data,通過循環(huán)重復(fù)取出單條彈幕信息,并提取對(duì)應(yīng)的字段def?get_infos(orgin_data):
????for?infos?in?orgin_data:
????????yield[
????????infos['type'],
????????infos['uid'],
????????infos['content'],
????????infos['time']
????????]
構(gòu)造保存數(shù)據(jù)函數(shù),將獲得的數(shù)據(jù)構(gòu)建成DaraFrame,將數(shù)據(jù)保存到csv文件中def?save_data(single_data):
????data=[]
????data.extend(single_data)
????columns=['type','uid','content','time']
????data_frame=pd.DataFrame(data=data,columns=columns)
????data_frame.to_csv('data2019.csv',mode='a')
最后封裝函數(shù),循環(huán)獲取所有彈幕文件if?__name__?==?"__main__":
????time_c=60000?#加載彈幕時(shí)間間隔
????for?i?in?range(0,110):?#此處110取決于最后彈幕的出現(xiàn)時(shí)間
????????print('開始?時(shí)間為'+str(i)+'的字幕')
????????main(time_c*i)
????????time.sleep(3)
三、展示成果
運(yùn)行爬蟲,開始工作爬取彈幕展示下我們爬取到的彈幕數(shù)據(jù)文件的前幾行數(shù)據(jù),達(dá)成獲得彈幕數(shù)據(jù)成就data=pd.read_csv('data2019.csv')
print(data.head())
四、one more thing
這篇文章并沒有太大難度,但是對(duì)于新手來說,網(wǎng)上的的教程都集中在代碼部分,而前期的分析工作則一筆帶過,其實(shí)這部分才是最重要的部分,這也是我寫本文的初衷。本文完整代碼,在「小詹學(xué)Python」后臺(tái)回復(fù)「中餐廳」即可獲取!推薦閱讀:(點(diǎn)擊下方標(biāo)題即可跳轉(zhuǎn))與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的《中餐厅》弹幕数据分析,我不要你觉得,我只要我觉得!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python数据分析实战基础 | 初识P
- 下一篇: 命令行的艺术