剛接觸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途徑如下:
點選位址欄的小鎖頭

打開coockie
打開bilibili的cookie 找到sessdata,複制即可。
csrf我沒找到,直接用的文章裡給的值:bili_jct
最後将爬取的彈幕存到txt文檔裡面:
彈幕擷取完成。
二、繪制詞雲
利用了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怕