- 1. 流程
- 2. 获取视频的cid号
- 3. 对xml文件提取弹幕,保存为txt文件
做B站弹幕的数据分析时,我们怎么把B站的所有弹幕下载下来呢?
其实B站已经给了获取弹幕的接口,我们只需知道对应视频的cid号即可
接口如下:http://comment.bilibili.com/{cid}.xml
或者:https://api.bilibili.com/x/v1/dm/list.so?oid={cid}
两个都可以
如我获取到的视频cid号为:438959674,只需要上面网址改为:https://comment.bilibili.com/438959674.xml,即可得到弹幕xml文件,右键保存xml文件即可,在对文件提取弹幕生成txt文件。 再对xml稍微做点爬取处理,得到弹幕的txt文本文件
那怎么获取视频的cid号呢?
在对应视频页面,按F12查看页面源代码,Network->heartbeat->cid
我的浏览器是Chrome,参考博客:https://blog.csdn.net/weixin_44899139/article/details/94770812
然后按1.流程方法
参考博客:https://blog.csdn.net/qq_45554010/article/details/115359659
Python代码如下:修改下cid号就可以用了
"""
Author: Chen Chunhan
Date : 2021-3-31 Wed.
提示:如果想爬取其他视频的弹幕信息请更改url和cid
"""
import re
from bs4 import BeautifulSoup
import requests
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'}
# 获取视频名称和作者
# url = 'https://www.bilibili.com/video/BV1f4411M7QC?from=search&seid=13006207604878782683'
# response = requests.get(url, headers)
# response.encoding = 'utf-8'
# page_text = response.text
# soup = BeautifulSoup(page_text, 'lxml')
# video_title = soup.find('span', class_='tit tr-fix').text
# print('视频名称:' + video_title)
# uploader = soup.find('a', attrs={'report-id': 'name'}).text.strip()
# print('UP主:' + uploader)
# 获取弹幕文件
cid = '438959674'
xml = "https://comment.bilibili.com/{}.xml".format(cid)
# xml = 'https://api.bilibili.com/x/v1/dm/list.so?oid={}'.format(cid)
response = requests.get(xml, headers)
response.encoding = 'utf-8'
xml_text = response.text
soup = BeautifulSoup(xml_text, 'lxml')
barrages = [re.sub(r's+', '', bar.text) for bar in soup.find_all('d')]
# 查看弹幕数量
print('弹幕数量:' + str(len(barrages)))
# 将弹幕写入文件
with open('./barrages.txt', 'w', encoding='utf-8') as output_file:
for bar in barrages:
output_file.write(bar + 'n')
print('弹幕信息已成功写入文件!')
其他稍微有点点效参考链接:
链接一
链接二
链接三
链接四
av号、bv号互转(不需要用到):
链接
链接



