系統供電

python爬取B站視訊彈幕分析并制作詞雲

養成習慣,先贊後看!!!@ TOC

1.分析網頁

視訊位址: www.bilibili.com/video/BV19E… 本身部落客同時也是一名up主,雖然已經斷更好久了,但是不妨礙我爬取彈幕資訊來分析呀。 這次我選取的是自己 唯一的爆款視訊 。就是下面這個。

python爬取B站視訊彈幕分析并制作詞雲

希望大家能夠多多支援up,up在這裡謝過大家了。 打開網址我們能夠發現彈幕資訊是存儲在這一塊的。

python爬取B站視訊彈幕分析并制作詞雲

本來以為是可以直接爬到的,但是當我點開F12檢查網頁的時候卻發現:

python爬取B站視訊彈幕分析并制作詞雲

他很明顯隻加載了一部分的彈幕資訊,那麼怎麼擷取呢,别急下面有一個檢視曆史彈幕資訊,我們點選一下試試看。

python爬取B站視訊彈幕分析并制作詞雲
python爬取B站視訊彈幕分析并制作詞雲

既然知道了資訊是藏在哪裡的,那麼接下來就是簡單分析一下他的 url位址的格式

了。

python爬取B站視訊彈幕分析并制作詞雲

可以看到重點其實就在date上,隻要更換date就能獲得那一天的彈幕了,是以我們基本确定我們的URL位址。接下來就是爬蟲了。

2.爬蟲+jieba分詞+制作詞雲

2.1爬蟲

首先是簡單的先擷取整個網頁資訊,但是擷取的過程中,出現了這個錯誤。

python爬取B站視訊彈幕分析并制作詞雲

這個大家都懂是啥意思,那麼我們怎麼解決的?很簡單,我們将賬号資訊帶進去就行了,那麼怎麼帶呢?這裡我選擇的是直接将 cookie資訊

放入請求頭之中。這個cookie資訊大家需要根據自己的浏覽傳回的資訊進行選擇。

python爬取B站視訊彈幕分析并制作詞雲

像這樣,放入headers中。

headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
         "cookie": "_uuid=32558797-D0FE-C0F7-536C-63AF0D8AE40770652infoc; buvid3=3DB514DE-EAB4-4ED9-B597-BCDD98AF986240968infoc; sid=hwpgj1q2; DedeUserID__ckMd5=e16b5b4e38e97a2b; CURRENT_FNVAL=16; rpdid=|(JYl~Yuukl~0J'ulmR|uuukk; LIVE_BUVID=AUTO7915950709280947; CURRENT_QUALITY=64; UM_distinctid=173a99a3d29656-0dfad7ca6e9865-3b634404-1fa400-173a99a3d2a9f0; bili_jct=69d8904981c02268b8880fc10dc2abac; bp_t_offset_103134642=420625431706221182; SESSDATA=048bf530%2C1611830350%2C409d1*81; DedeUserID=103134642; PVID=1; bp_video_offset_103134642=422972760179214717; bfe_id=6f285c892d9d3c1f8f020adad8bed553"}
複制代碼
加python學習qq群:775690737 送python零基礎入門學習資料+99個源碼
           

這樣我們便能爬取到了

python爬取B站視訊彈幕分析并制作詞雲

接下來擷取彈幕資訊。這裡很簡單通過xpath就能擷取到。

parse=parsel.Selector(html)
links=parse.xpath("//d/text()").getall()
print(links)
加python學習qq群:775690737 送python零基礎入門學習資料+99個源碼
           
python爬取B站視訊彈幕分析并制作詞雲

既然已經擷取到彈幕了,我們就需要将這些資訊存儲起來,用于我們接下來的操作。 這裡我們選擇将它存儲到CSV檔案中具體操作其實和之前的檔案下載下傳操作相差不大。

for i in links:
    with open(r'C:\Users\瓤瓤\Desktop\B站彈幕.csv','a',newline='',encoding='utf-8-sig') as f:
        writer=csv.writer(f)
        links=[]
        links.append(i)
        writer.writerow(links)
加python學習qq群:775690737 送python零基礎入門學習資料+99個源碼
           

打開之後就是這樣的:

python爬取B站視訊彈幕分析并制作詞雲

2.2jieba分詞

檔案都存儲好了,那麼我接下來的第一步就是将我們的彈幕進行jieba分詞,拆解成一個一個的詞語

f =open(r'C:\Users\瓤瓤\Desktop\B站彈幕.csv',encoding='utf-8')#打開檔案
text=f.read() #讀取檔案
text_list=jieba.analyse.extract_tags(text,topK=40)#進行jieba分詞,并且取頻率出現最高的40個詞
text_list=" ".join(text_list)#用空格将這些字元串連接配接起來
print(text_list)
加python學習qq群:775690737 送python零基礎入門學習資料+99個源碼
           

效果:

python爬取B站視訊彈幕分析并制作詞雲

2.3制作詞雲

既然詞我們已經準備好了,那麼我們接下來就是将它制作成詞雲。

#建立自定義圖檔樣式
img=plt.imread('./img/huge.jpg')
w=wordcloud.WordCloud(
    width=1500,
    height=1000,
    font_path="STXIHEI.TTF",#設定字型的格式 字型所在位置C:\Windows\Fonts
    background_color="white",
    scale=50,
    contour_width=5,
    contour_color="red",
    mask=img,#圖檔遮罩層
    #設定屏蔽詞
    stopwords={"00","天下第一","bgm","周董","真的","胡是","你币","肖戰","遊記","周傑倫","陳奕迅","這個"}
)
w.generate_from_text(text_list)

#繪制圖檔
fig=plt.figure(1)
plt.imshow(w)
plt.axis("off")
plt.show()     #顯示生成的詞雲檔案
加python學習qq群:775690737 送python零基礎入門學習資料+99個源碼
           
複制代碼      

在設定字型樣式的過程中千萬要 選用能夠識别中文的字型樣式 ,否則會變成一堆方框。字型所在位置字型所在位置 C:\Windows\Fonts 接着隻要耐心等程式運作完就行了。

3.成品展示

python爬取B站視訊彈幕分析并制作詞雲

4.完整代碼

import requests
import parsel
import csv
import jieba.analyse
import wordcloud
from matplotlib import pylab as plt
url='https://api.bilibili.com/x/v2/dm/history?type=1&oid=160472309&date=2020-08-12'
headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36",
         "cookie": "_uuid=32558797-D0FE-C0F7-536C-63AF0D8AE40770652infoc; buvid3=3DB514DE-EAB4-4ED9-B597-BCDD98AF986240968infoc; sid=hwpgj1q2; DedeUserID__ckMd5=e16b5b4e38e97a2b; CURRENT_FNVAL=16; rpdid=|(JYl~Yuukl~0J'ulmR|uuukk; LIVE_BUVID=AUTO7915950709280947; CURRENT_QUALITY=64; UM_distinctid=173a99a3d29656-0dfad7ca6e9865-3b634404-1fa400-173a99a3d2a9f0; bili_jct=69d8904981c02268b8880fc10dc2abac; bp_t_offset_103134642=420625431706221182; SESSDATA=048bf530%2C1611830350%2C409d1*81; DedeUserID=103134642; PVID=1; bp_video_offset_103134642=422972760179214717; bfe_id=6f285c892d9d3c1f8f020adad8bed553"}
response=requests.get(url,headers=headers)
html=response.content.decode("utf-8")
# print(html)
parse=parsel.Selector(html)
links=parse.xpath("//d/text()").getall()
# print(links)
for i in links:
    with open(r'C:\Users\瓤瓤\Desktop\B站彈幕.csv','a',newline='',encoding='utf-8-sig') as f:
        writer=csv.writer(f)
        links=[]
        links.append(i)
        writer.writerow(links)

# #制作詞雲圖
f =open(r'C:\Users\瓤瓤\Desktop\B站彈幕.csv',encoding='utf-8')
text=f.read()
text_list=jieba.analyse.extract_tags(text,topK=40)
text_list=" ".join(text_list)
print(text_list)
#
img=plt.imread('./img/huge.jpg')
w=wordcloud.WordCloud(
    width=1500,
    height=1000,
    font_path="STXIHEI.TTF",
    background_color="white",
    scale=50,
    contour_width=5,
    contour_color="red",
    mask=img,
    stopwords={"00","天下第一","bgm","周董","真的","胡是","你币","肖戰","遊記","周傑倫","陳奕迅","這個"}
)
w.generate_from_text(text_list)

#繪制圖檔
fig=plt.figure(1)
plt.imshow(w)
plt.axis("off")
plt.show()     #顯示生成的詞雲檔案
加python學習qq群:775690737 送python零基礎入門學習資料+99個源碼
           
複制代碼