天天看點

【python實戰】B站彈幕是如何看待“法外狂徒張三”的?詞雲分析

更多文章歡迎訂閱上方《從實戰學python》專欄

哈喽,大家好,我是一條。

今日逛B站時發現“法外狂徒張三”在B站的熱度相當之高,随随便便一個幾分鐘的視訊就有

100w+

的播放量。

是以一條就來了興趣,B站人是如何看待“法外狂徒張三”的?

我們爬取彈幕并制作詞雲分析一下。

擷取彈幕

分析url

首先要拿到url,B站搜尋

張三

,我們就用第一個視訊:【張三的社會語錄】

https://www.bilibili.com/video/av588303995

F12

分析一下

【python實戰】B站彈幕是如何看待“法外狂徒張三”的?詞雲分析

點選

檢視曆史彈幕

——

選擇一個日期

可以看到一個

seg.so

的連結,後面是

oid=

,如此我們就拿到了該視訊彈幕的

oid

拼接到彈幕

API

,得到彈幕的

xml

位址

https://api.bilibili.com/x/v1/dm/list.so?oid=345114463
           

發送請求

由于沒有登入驗證,我們就簡單的發送一條

get

請求,并用

xpath

解析

【python實戰】B站彈幕是如何看待“法外狂徒張三”的?詞雲分析
import requests
from lxml import etree
def get_text():
    url='https://api.bilibili.com/x/v1/dm/list.so?oid=345114463'
    res=requests.get(url)
    res.encoding='utf-8'
    with open("bilibili.xml", 'wb') as f:
       f.write(res.content)
    html = etree.parse('bilibili.xml',etree.HTMLParser())
    b_list=html.xpath('//d//text()')
    with open("bilibili.txt",'a+',encoding='utf-8') as f:
       for i in b_list:
           f.write(i+'\n')
    print("彈幕擷取完成")
           

文本處理

安裝分詞庫

pip install jieba
           

jieba分詞

jieba

分詞的作用是将彈幕的長句分成單個的詞語,以便進行詞雲的繪制

在分詞前還要去除無效資料,比如标點符号,語氣助詞……

【python實戰】B站彈幕是如何看待“法外狂徒張三”的?詞雲分析
def get_wc():
    with open("bilibili.txt", "r",encoding='utf-8') as f:
        txt = f.read()
    re_move = [",", "。",'\n','\xa0',' ','的','了','嗎','我','你']
    for i in re_move:
        txt = txt.replace(i, " ")
    word = jieba.lcut(txt)  
    with open("bilibili_wc.txt", 'w',encoding='utf-8') as f:
        for i in word:
            f.write(str(i) + ' ')
    print("文本處理完成")
           

生成詞雲

安裝wordcloud

pip install wordcloud
           

wordcloud

當我們手中有一篇文檔,比如書籍、小說、電影劇本,若想快速了解其主要内容是什麼,則可以采用繪制 WordCloud 詞雲圖,顯示主要的

高頻詞

這種方式,非常友善。

使用wordcloud可以指定使用的字型, 在windows中, 字型在以下的檔案夾中:

C:\Windows\Fonts

, 可以将其中的字型檔案拷貝到目前的檔案夾内。

本文基于

bilibili

的logo進行詞雲繪制

【python實戰】B站彈幕是如何看待“法外狂徒張三”的?詞雲分析
def get_img():
    bg = numpy.array(image.open('b.png'))
    with open("bilibili_wc.txt", "r",encoding='utf-8') as f:
        txt = f.read()
    word = WordCloud(background_color="white", \
                     width=500, \
                     height=500,
                     font_path='simhei.ttf',
                     mask=bg,
                     ).generate(txt)
    word.to_file('test.png')
    print("詞雲圖檔已儲存")

    plt.imshow(word)  # 使用plt庫顯示圖檔
    plt.axis("off")
    plt.show()
           

成果展示

if __name__ == '__main__':
    get_text()
    get_wc()
    get_img()
           
【python實戰】B站彈幕是如何看待“法外狂徒張三”的?詞雲分析

需要彈幕資料和源碼的同學

評論區評論【張三】擷取

我是一條,一個在網際網路摸爬滾打的程式員。

道阻且長,行則将至。

大家的 【點贊,收藏,關注】 就是一條創作的最大動力,我們下期見!

注:關于本篇部落格有任何問題和建議,歡迎大家留言!