【爬蟲+數(shù)據(jù)清洗+可視化分析】輿情分析嗶哩嗶哩"狂飆"的評論
一、背景介紹
您好,我是 @馬哥python說,一枚10年程序猿。
2023開年這段時間,《狂飆》這部熱播劇引發(fā)全民追劇,不僅全員演技在線,更是符合反黑主旋律,因此創(chuàng)下多個收視率紀錄!
基于此熱門事件,我用python抓取了B站上千條評論,并進行可視化輿情分析,下面詳細講解代碼。
二、爬蟲代碼
2.1 展示爬取結(jié)果
首先,看下部分爬取數(shù)據(jù):

爬取字段含:視頻鏈接、評論頁碼、評論作者、評論時間、IP屬地、點贊數(shù)、評論內(nèi)容。
2.2 爬蟲代碼講解
導(dǎo)入需要用到的庫:
定義一個請求頭:
請求頭中的cookie是個很關(guān)鍵的參數(shù),如果不設(shè)置cookie,會導(dǎo)致數(shù)據(jù)殘缺或無法爬取到數(shù)據(jù)。
那么cookie如何獲取呢?打開開發(fā)者模式,見下圖:

由于評論時間是個十位數(shù):

所以開發(fā)一個函數(shù)用于轉(zhuǎn)換時間格式:
向B站發(fā)送請求:
接收到返回數(shù)據(jù)了,怎么解析數(shù)據(jù)呢?看一下json數(shù)據(jù)結(jié)構(gòu):

0-19個評論,都存放在replies下面,replies又在data下面,所以,這樣解析數(shù)據(jù):
這樣,data_list里面就是存儲的每條評論數(shù)據(jù)了。
接下來嗎,就是解析出每條評論里的各個字段了。
我們以評論內(nèi)容這個字段為例:
其他字段同理,不再贅述。
最后,把這些列表數(shù)據(jù)保存到DataFrame里面,再to_csv保存到csv文件,持久化存儲完成:
注意,加上encoding='utf_8_sig',否則可能會產(chǎn)生亂碼問題!
下面,是主函數(shù)循環(huán)爬取部分代碼:(支持多個視頻的循環(huán)爬?。?/p>
三、可視化代碼
為了方便看效果,以下代碼采用jupyter notebook進行演示。
3.1 讀取數(shù)據(jù)
用read_csv讀取剛才爬取的B站評論數(shù)據(jù):

查看前3行及數(shù)據(jù)形狀:

3.2 數(shù)據(jù)清洗
處理空值及重復(fù)值:

3.3 可視化
3.3.1 IP屬地分析-柱形圖

可得結(jié)論:TOP10地區(qū)中,評論里關(guān)注度最高為廣東、山東、江蘇等地區(qū),其中,廣東省的關(guān)注度最高。
3.3.2 評論時間分析-折線圖
分析出評論時間的分布情況:

可得結(jié)論:關(guān)于"狂飆"這個話題,在抓取到的數(shù)據(jù)范圍內(nèi),2月2日的評論數(shù)據(jù)量最大,網(wǎng)友討論最熱烈,達到了將近1200的數(shù)量峰值。
3.3.3 點贊數(shù)分布-直方圖
由于點贊數(shù)大部分為0或個位數(shù)情況,個別點贊數(shù)到達成千上萬,直方圖展示效果不佳,因此,僅提取點贊數(shù)<30的數(shù)據(jù)繪制直方圖。

可得結(jié)論:從直方圖的分布來看,點贊數(shù)在0-3個的評論占據(jù)大多數(shù),很少點贊數(shù)達到了上千上萬的情況。證明網(wǎng)友對狂飆這部作品的態(tài)度分布比較均勻,沒有出現(xiàn)態(tài)度非常聚集的評論內(nèi)容。
3.3.4 評論內(nèi)容-情感分布餅圖
針對中文評論數(shù)據(jù),采用snownlp開發(fā)情感判定函數(shù):

情感分布餅圖,如下:

可得結(jié)論:關(guān)于狂飆這部電視劇,網(wǎng)友的評論情感以正面居多,占據(jù)了70.43%,說明這部電視劇獲得了網(wǎng)友們很高的評價。
3.3.5 評論內(nèi)容-詞云圖
除了哈工大停用詞之外,還新增了自定義停用詞:

jieba分詞之后,對分詞后數(shù)據(jù)進行繪制詞云圖:

可得結(jié)論:在詞云圖中,狂飆、高啟強、黃瑤、安欣、結(jié)局等詞匯較大,出現(xiàn)頻率較高,反應(yīng)出眾多網(wǎng)友對狂飆這部電視劇的劇情討論熱度很高。
附原始背景圖,可對比看:(需要先人物摳圖)

四、演示視頻
代碼演示視頻:

五、獲取完整源碼
愛學(xué)習(xí)的小伙伴,本次分析過程的完整python源碼及結(jié)果數(shù)據(jù),我已打包好,并上傳至我的微信公眾號"老男孩的平凡之路",后臺回復(fù)"狂飆"即可獲取。

我是@馬哥python說 ,持續(xù)分享python干貨!