Python爬取B站弹幕方法介绍

文章目录

  • Python爬取B站弹幕方法介绍
    • 前言
    • 寻找弹幕数据
    • 编写爬虫
    • B站弹幕数量
    • 新技术介绍
    • 参考文章

前言

最近同学要做东西,需要用 B 站的视频对应的弹幕数据做分析,于是请我帮忙爬取 B 站视频的弹幕数据。

对于爬虫而言,我们需要找到对应数据所在的接口,找到接口,就可以找到对应的数据。这个时候我们只需要简单的调用 Python 库进行爬取,输出到文件即可。

目前针对 B 站弹幕爬取有两种方法

  • 方法一,找到接口数据,编码爬取
  • 方法二,找到 BV号,调用API

这篇博客分别对两种方法进行了整合介绍,并给出了详细的操作流程。

寻找弹幕数据

其实 B 站是提供了弹幕接口的,B站把视频对应的弹幕数据全部放在 xml 文件中,获取的接口是

1、https://comment.bilibili.com/视频的cid.xml
2、https://api.bilibili.com/x/v1/dm/list.so?oid=视频的cid

两个接口目前都是可以正常使用的,第一个接口是老版本,第二个接口是新版本。

这里我们使用老版本接口,以视频“刺客伍六七”为例子来演示,获取视频对应的 cid,使用的是谷歌浏览器。

  • 第一步,到 B站打开对应视频,比如“刺客伍六七”,进入视频播放页面(先不要点击播放)

  • 第二步,按 F12 键,打开浏览器的控制台,转到 NetWork 部分

  • 第三步,点击播放,注意观察 NetWork 下面加载的文件,当看到名为 heartbeatxhr 文件时,点击暂停。

heartbeat 的里面记录了该视频的一些特有信息,比如 aid、cid、BVid 等等。一个的视频特有信息都是固定的,比如一个视频只有一个 cid。

  • 第四步,点击任意一个 heartbeat 文件,在 Headers 标签页中往下翻,就可以找到 cid 了。

可以看到,刺客伍六七第一集的 cid 为 47506569。

  • 第五步,将 cid 与对应的接口进行拼接,输入在浏览器的地址栏进行查看

这一步是为了熟悉对应弹幕数据的网页结构,方便之后的编码工作进行数据的提取。如果使用熟练的话则可以跳过此步。

编写爬虫

既然我们已经可以找到了弹幕数据所在的的地方,直接进行爬取即可。大致可以分为以下几步:

  1. 获取整个页面
  2. 提取弹幕数据
  3. 简单的数据预处理
  4. 输出到文件

爬虫编写完成后,每次我们只需要修改文件名和 cid 就可以继续爬取弹幕数据保存到文件中了。

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re# 弹幕保存文件
file_name = '刺客伍六七第一集.csv'# 获取页面
cid = 47506569
url = "https://comment.bilibili.com/" + str(cid) + ".xml"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
request = requests.get(url=url, headers=headers)
request.encoding = 'utf-8'# 提取弹幕
soup = BeautifulSoup(request.text, 'lxml')
results = soup.find_all('d')# 数据处理
data = [data.text for data in results]
# 正则去掉多余的空格和换行
for i in data:i = re.sub('\s+', '', i)# 查看数量
print("弹幕数量为:{}".format(len(data)))# 输出到文件
df = pd.DataFrame(data)
df.to_csv(file_name, index=False, header=None, encoding="utf_8_sig")
print("写入文件成功")

代码说明:

  1. B站目前还没有针对爬虫设置特别的反爬措施,因此可以直接爬取
  2. 弹幕数据绝大部分都是中文,一定要使用 utf-8 编码
  3. xml 文件中弹幕数据都在 d 标签内,使用 BeautifulSoup 来提取所有的 d 标签,再获取标签内的数据
  4. 弹幕数据可能会有多余的空格和换行,使用正则表达式进行处理
  5. 使用 Dataframe 将数据输出到 csv 文件中。参数 index=False 不将索引序列保存到文本、header=None 不保存列名。

爬虫写入文件的结果如下图:

B站弹幕数量

这里不得不提一下 B 站的弹幕数量规则:

B站的弹幕池是有上限的,弹幕的具体数量和视频的长度有所联系。一般来讲,一部十分钟内的视频弹幕数量上限为 1000,一部25分钟的视频为 3000,40分钟左右的为 6000,时间更长的话会破万。

如果大家发的弹幕数量太多了,超过弹幕池的数量上限怎么办?

B 站的做法是按照时间顺序用将以前的弹幕剔除掉,然后放入新的弹幕,这样就将该视频的弹幕数量始终维持在一个等级上,而且用户看到的还是最新的弹幕

比如这里,“刺客伍六七”第一集的时长是16分半,弹幕数量 3000。

新技术介绍

今年,也就是 2020 年,B站某位大佬在 github 上分享了自己的开源项目,也就是 bilibili 的 API 调用库。

GitHub 地址为:https://github.com/Passkou/bilibili_api

通过这个 API 调用模块,可以实现获取视频的评论、弹幕、播放量等信息,还可以实现投币、点赞、发送弹幕等一系列的用户功能。

比起我们上面所介绍的方式,用这个 API 来获取视频的弹幕就更为简单了。我们只需要传入视频的 BVid,调用弹幕 API 即可获取该视频的弹幕。(Bvid 的获取和 cid 同理)

在使用这个 API 之前,我们需要先用 pip 把这个库安装上

pip install bilibili_api

可以看到,调用 API 简直不要太方便。而且 API 还有人维护和更新,拿来即可用。

from bilibili_api import video
import re
import pandas as pd# BVid、fileName
BVid = "BV1oW41157Na"
file_name = '刺客伍六七第一集.csv'# 获取弹幕
my_video = video.VideoInfo(bvid=BVid)
danmu = my_video.get_danmaku()# 数据处理
data = [data.text for data in danmu]
for i in data:i = re.sub('\s+', '', i)# 查看数量
print("弹幕数量为:{}".format(len(data)))# 输出到文件
df = pd.DataFrame(data)
df.to_csv(file_name, index=False, header=None, encoding="utf_8_sig")
print("写入文件成功")

参考文章

python爬虫:bilibili弹幕爬取

bilibili弹幕获取api

pandas-DataFrame格式化保存到txt

bilibili 弹幕会被限制数量吗

bilibili-API

Python爬取B站弹幕方法介绍相关推荐

  1. python接收弹幕_闲着没事,尝试一下用Python爬取B站弹幕呀~

    原标题:闲着没事,尝试一下用Python爬取B站弹幕呀~ 前言 最近同学要做东西,需要用 B 站的视频对应的弹幕数据做分析,于是请我帮忙爬取 B 站视频的弹幕数据. 对于爬虫而言,我们需要找到对应数据 ...

  2. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下: http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这 ...

  3. python爬取b站弹幕并进行数据可视化

    python爬取b站弹幕并进行数据可视化 1.第一步,爬取b站弹幕 我们随便打开一个b站视频 打开开发者模式,在network下搜索list,可以找到该视频的弹幕文件 打开之后是这个样子的 结构还是比 ...

  4. 用Python爬取B站弹幕并做成词云

    用Python爬取B站弹幕并做成词云 一.获取视频的cid号 1.进入想爬的视频,打开浏览器设置里的"开发者工具": 进入NetWork后等待requests刷出,数据够了后可随意 ...

  5. python爬取b站弹幕分析_B站弹幕爬取原理解析(python)

    感谢 原理 概念 cid : 爬取弹幕需要的id号,可以由BV号通过API接口获得 步骤BV转cid 浏览器输入:https://api.bilibili.com/x/player/pagelist? ...

  6. Python爬取B站弹幕+Gephi梳理主线剧情

    作者 | 皖渝 出品 | 凹凸数据(ID:alltodata) 头图 |  CSDN 下载自东方IC 爬取介绍 利用 Chrome 浏览器抓包可知,B站的弹幕文件以 XML 文档式进行储存,如下所示( ...

  7. python爬取b站弹幕_如何爬取B站弹幕

    前言 主要记录自己完成爬虫的思路:从how to do到what to do这是一个拿 python 练手的项目,虽说是入门级,但其余爬虫也万变不离其宗 ̄へ ̄ [源代码地址 Github:bili-d ...

  8. python爬取b站弹幕分析_如何爬取b站弹幕文件

    我们知道编写一个爬虫之前最重要的是进行网页结构的分析,确定你要抓取的部分是属于网页结构的哪一部分.以"你绝对没听过的梁朝伟唱歌 一开口就苏了 可惜被梁家辉开腔了"为例子,打开谷歌浏 ...

  9. 用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

    尽管抄袭傍身,也没能阻挡<爱情公寓5>进击的脚步. 最近爱情公寓电视剧微博发布了长达8分钟的揭幕视频,官宣新季将在2020正式开播. 几位主演纷纷转发宣传,将#爱情公寓5揭幕#的话题送上了 ...

最新文章

  1. docred数据集情况笔记
  2. JDK17 要来了!会带来什么新特性?不好意思,我还在JDK7 踏步走...
  3. 虚拟光驱安装服务器无法运行,windows7虚拟光驱无法正常打开怎么办
  4. 为什么要学jquery
  5. 强力推荐几种多媒体播放器方案(jQuery、Flash、HTML5)
  6. 如何将一个完整项目推到码云_怎么将本地项目放到码云(gitee)上面?图文详解
  7. 选中一行的快捷键_常用文字编辑快捷键,学会之后,天天可以提前下班
  8. 22. yii 2 sql
  9. SpringAOP原理解析
  10. 2019北航计算机961考研经验总结
  11. 二、GAMIT解算之数据准备
  12. 搜索引擎和网站中的高级搜索技巧
  13. FAN 人脸对齐网络结构详细解析
  14. 再见Python你好C语言,再见,Python 2 你好,Python 3
  15. 搜索衬线字体和无衬线字体的区别
  16. 5.字符串:aa:zhangsan@163.com!bb:lisi@sina.com!cc:wangwu@126.com 将存入hashMap中 key:aa,bb,cc value:zhang
  17. python写乘法口诀表好记方法_乘法口诀表好记方法
  18. MobaXterm x11-forwarding
  19. 百度信息流流量优化白皮书
  20. Android二手书交易app设计(2)启动图Activity

热门文章

  1. 操作系统:内存连续分配方式采用的几种算法及各自优劣
  2. Hibernate:根据配置文件自动生成表结构的2种方式
  3. pandas 或者字段值_pandas用法总结
  4. 15天内数据迁移!广东省能源局发布通知,这类数据中心面临停工风险!
  5. 有一种灾难,叫数据中心被大火烧了
  6. Oracle数据库asm原理,Oracle数据库中ASM功能解剖
  7. python有什么好玩的库_你知道Python很火!那你知道它有哪些好玩的库吗?
  8. 成功解决graphviz\backend.py, line 162, in pipe raise ExecutableNotFound(args) graphviz.backend.Executab
  9. DL之CG:Computational Graph计算图的简介、入门、使用之详细攻略
  10. BlockChain:《Blockchain Gate》听课笔记——区块链构筑的比特世界 VS 现实的原子世界