更多文章歡迎訂閱上方《從實戰學python》專欄
哈嘍,大家好,我是一條,
今日逛B站時發現“法外狂徒張三”在B站的熱度相當之高,隨隨便便一個幾分鐘的視頻就有
100w+的播放量,所以一條就來了興趣,B站人是如何看待“法外狂徒張三”的?
我們爬取彈幕并制作詞云分析一下,
獲取彈幕
分析url
首先要拿到url,B站搜索張三,我們就用第一個視頻:【張三的社會語錄】
https://www.bilibili.com/video/av588303995
F12分析一下

點擊查看歷史彈幕——選擇一個日期
可以看到一個seg.so的鏈接,后面是oid=,如此我們就拿到了該視頻彈幕的oid
拼接到彈幕API,得到彈幕的xml地址
https://api.bilibili.com/x/v1/dm/list.so?oid=345114463
發送請求
由于沒有登錄驗證,我們就簡單的發送一條get請求,并用xpath決議

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分詞的作用是將彈幕的長句分成單個的詞語,以便進行詞云的繪制
在分詞前還要去除無效資料,比如標點符號,語氣助詞……

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進行詞云繪制

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()

需要彈幕資料和原始碼的同學
評論區評論【張三】獲取
我是一條,一個在互聯網摸爬滾打的程式員,
道阻且長,行則將至,
大家的 【點贊,收藏,關注】 就是一條創作的最大動力,我們下期見!
注:關于本篇博客有任何問題和建議,歡迎大家留言!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/290282.html
標籤:python
