前言
本次爬取的視頻av號為75993929(11月21的b站榜首),講的是關於動漫革命機,這是一部超魔幻現實主義動漫(滑稽),有興趣的可以親身去感受一下這部魔幻大作。
准備工作
- B站彈幕的爬取的接口
https://api.bilibili.com/x/v1/dm/list.so?oid=
打開開發者模式,其中的oid的值 - 獲取視頻發出以來的所有彈幕,構造URL
https://api.bilibili.com/x/v2/dm/history?type=1&oid=129995312&date=2019-11-17
- 訪問一下彈幕頁面,發現彈幕都放在
標簽中。
代碼
import requests
from pyquery import PyQuery as pq
import jieba
import pandas as pd
# 通過時間來獲取彈幕信息需要登陸才行,所以帶上登陸后的cookie。否則只能獲取當日的一千條彈幕
headers={
"放入cookie"
}
word = []
def getInfo(date):
response = requests.get("https://api.bilibili.com/x/v2/dm/history?type=1&oid=129995312&date=2019-11-"+str(date), headers=headers)
# 解決中文亂碼問題
response.encoding = response.apparent_encoding
doc = pq(response.content)
# 獲取所有的d標簽
result = doc("d")
for line in result:
word.append(line.text)
# 將彈幕信息保存到csv文件中去
def savaFile():
sr = pd.Series(word)
sr.to_csv("評革命機B站彈幕.csv", encoding='utf-8', index=None)
# 利用jieba庫對彈幕內容進行分詞
def seperate():
data = pd.read_csv(open("評革命機B站彈幕.csv", encoding='utf-8'))
# 傳入自定義的字典,畢竟b站玩梗玩到飛起
jieba.load_userdict('dict.txt')
strs = ""
for i in data.values:
strs += "".join(i[0])
l = jieba.cut(strs, cut_all=True)
res = '/'.join(l)
# 保存到文件中去
with open("word.txt", 'w', encoding='utf-8') as f:
f.write(res)
# 分析詞語出現的頻率
def analyse():
res = set()
def dropNa(s):
return s and s.strip()
data = open("word.txt", encoding='utf-8').read()
data = data.split('/')
newdata = []
for i in data:
# 去除掉一些無用的
if '哈' in i or len(i) == 1 or '嘿' in i:
continue
newdata.append(i)
data = newdata
# 去除空串
data = list(filter(dropNa, data))
df = pd.Series(data)
# 統計出現頻率同時寫入文件中
df.value_counts().to_csv("彈幕TOP.csv")
for i in range(18, 22):
getInfo(i)
savaFile()
seperate()
analyse()
結果展示
大河內老師不愧是早稻田大學人類科學系的畢業的
這些彈幕突然就有內味了
預知為何彈幕會呈現這種情況,詳情請見這部動畫曾因不切實際被人嘲諷,但6年后現實卻打了所有人的臉! 【革命機】
存在的問題
- jieba分詞的效果其實不太理想,希望未來能夠找到改進方法。
- 本來想做成詞雲的,但是效果也不佳,待改進。