栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python实战:B站弹幕分析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python实战:B站弹幕分析

文章目录
  • 1. 流程
  • 2. 获取视频的cid号
  • 3. 对xml文件提取弹幕,保存为txt文件


做B站弹幕的数据分析时,我们怎么把B站的所有弹幕下载下来呢?

1. 流程

其实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号呢?


2. 获取视频的cid号

在对应视频页面,按F12查看页面源代码,Network->heartbeat->cid
我的浏览器是Chrome,参考博客:https://blog.csdn.net/weixin_44899139/article/details/94770812

然后按1.流程方法


3. 对xml文件提取弹幕,保存为txt文件

参考博客: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号互转(不需要用到):
链接
链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号