最近在B站發(fā)現(xiàn)一個彈琵琶的小姐姐震捣,真的是人美歌甜啊啊啊直秆,所以打算爬取她的視頻來分析彈幕同時制作詞云蔫劣。
查找相關信息之后發(fā)現(xiàn),爬取B站彈幕的API接口有兩個吭产,分別是
https://api.bilibili.com/x/v1/dm/list.so?oid=cid
http://comment.bilibili.com/+cid+.xml
后面需要加上需要爬取的視頻文件的cid侣监。B站的每個視頻都有自己獨特的av號,bv號和cid臣淤。通過av號和bv號可以確定視頻的地址橄霉,cid可以確定彈幕文件的地址。
任意打開一個彈幕文件邑蒋,例如
我們可以發(fā)現(xiàn)彈幕就在這個網(wǎng)頁文件中姓蜂。
-
獲取B站視頻的cid
打開B站,任意找一個視頻医吊,右鍵單擊鼠標钱慢,點擊“檢查”。
打開視頻卿堂,在右邊的Network中找heartbeat文件束莫,其中就有對應的cid(也有aid也就是av號和bvid也就是bv號)。
import imageio as imageio #加載圖片
import requests #發(fā)出請求
import re #內置庫 用于匹配正則表達式
import csv #文件格式
import jieba #中文分詞
import wordcloud #繪制詞云
cid=input('please input a cid:')
#url = 'https://api.bilibili.com/x/v1/dm/list.so?oid='+cid
url='http://comment.bilibili.com/'+cid+'.xml'
#獲取完整的彈幕文件url
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
}
#請求頭草描,模仿瀏覽器行為
response = requests.get(url,headers=headers)
# print(response.content.decode('utf-8'))
html_doc = response.content.decode('utf-8')
#把編碼轉化為utf_8編碼
res = re.compile('<d.*?>(.*?)</d>')
#正則表達式匹配彈幕
danmu = re.findall(res,html_doc)
#寫入csv文件
for i in danmu:
with open('b站彈幕.csv','a',newline='',encoding='utf-8-sig') as file:
writer = csv.writer(file)
danmu = []
danmu.append(i)
writer.writerow(danmu)
# 顯示數(shù)據(jù)
f = open('b站彈幕.csv',encoding='utf-8')
txt = f.read()
print(txt)
f.close()
txt_list = jieba.lcut(txt) #精確分詞
string = ' '.join((txt_list))
img='C:/Users/lenovo/Pictures/20200505101029364.png'
#本地圖片
mk = imageio.imread(img)
#控制詞云形狀的重要參數(shù)
w = wordcloud.WordCloud(max_font_size=70,
background_color='white',
font_path='C:/Windows/SIMLI.TTF',
mask=mk,
scale=3)
w.generate(string) #生成詞云的關鍵一步
w.to_file('pycloud.png')
到這里我們成功的找到B站的彈幕文件览绿,同時按照詞頻生成了詞云。關于更加詳細的制作詞云穗慕,也就是jieba庫和wordcloud庫的知識可以移步這篇文章https://blog.csdn.net/weixin_46530492/article/details/106832412