天天看點

https open api_通過bilibili_api擷取彈幕+繪制詞雲的方法

剛接觸python 随手做一些自己感興趣的項目,看到了一個通過bilibili_api三行代碼擷取彈幕的教程(vx公号:天作之程(jhtmtzzc))使用的是bilibili_api ,是2020年1月份釋出的接口,可以很友善的擷取彈幕、視訊資訊、評論等。

由于自己學藝不精,後續詞雲的簡略代碼沒怎麼看懂,梳理了一遍把整個的學習内容記錄下來。主要參考的為bilibili_api的教程和詞雲的生成教程(https://blog.csdn.net/itanders/article/details/88858415)

自己的環境:python3.7;pycharm編譯器

一、bilibili_api擷取彈幕

這部分代碼如下:

#爬取bilibili彈幕from bilibili_api import  Verifyfrom bilibili_api.video import VideoInfofrom bilibili_api.video import Danmakuverify = Verify(sessdata="自己的sessdata",csrf="bili_jct")video_info = VideoInfo(bvid="BV1JE411g7XF",verify=verify)f = open(r'D:學習LMY_pythonlearnbilibili.txt','a')danmu = video_info.get_danmaku()for i in danmu:    f.write(i.text)f.close()1234567891011
           

首先要給verify指定的登入資訊:sessdata和csrf,在b站登入帳号後,chrome擷取sessdata途徑如下:

點選位址欄的小鎖頭

https open api_通過bilibili_api擷取彈幕+繪制詞雲的方法

打開coockie

https open api_通過bilibili_api擷取彈幕+繪制詞雲的方法

打開bilibili的cookie 找到sessdata,複制即可。

https open api_通過bilibili_api擷取彈幕+繪制詞雲的方法

csrf我沒找到,直接用的文章裡給的值:bili_jct

最後将爬取的彈幕存到txt文檔裡面:

https open api_通過bilibili_api擷取彈幕+繪制詞雲的方法

彈幕擷取完成。

二、繪制詞雲

利用了jieba進行分詞,然後用wordcloud繪制詞雲,matplot可視化。代碼如下:

import jiebaimport  numpy as npfrom  pathlib import Pathfrom PIL import  Imagefrom wordcloud import  WordCloud,ImageColorGeneratorfrom matplotlib import pyplot as pltdef split_text(text):    #用于jieba分詞    word_list = ' '.join(jieba.cut(text))    return  word_listdef draw_wordcloud(text,image_mask):#以給定圖檔為輪廓顯示詞雲    alice_mask = np.array(Image.open(image_mask))    wc = WordCloud(background_color="white", max_words=20, mask=alice_mask, contour_width=3,font_path = 'D:/學習/LMY_pythonlearn/msyh.ttf')    wc.generate(text)    image_Colors = ImageColorGenerator(alice_mask)    plt.figure(figsize=(14,8))    # 建立詞雲圖    plt.imshow(wc.recolor(color_func= image_Colors ), interpolation='bilinear')    plt.axis('off')    plt.show()text_path = Path('bilibili.txt')with text_path.open(encoding='GB18030') as f:    text_content = f.read()bilibili = split_text(text=text_content)draw_wordcloud(text=str(bilibili),image_mask='alicepic.png')123456789101112131415161718192021222324252627282930
           

需要注意的地方:

10行:jieba.cut傳回的是一個generator,裡面并不包含分割好的詞,下一步用join時才執行計算。

16行:生成的詞雲需要指定字型,不然出來的詞都是框框。無法顯示,給個字型路徑就好了。

30行:由于WordCloud詞雲讀取的文本必須以字元串或者二進制形式輸入,否則會報錯TypeError: expected string or bytes-like object的關系,是以我們強制将jieba分詞傳回的list類型内容轉換為str類型。

源碼記得私信小編01怕