一个用Python爬虫爬取Bilibili弹幕的小例子解析

BitOrbit
• 阅读 3397

先来思考一个问题,B站一个视频的弹幕最多会有多少?

比较多的会有2000条吧,这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的。

也就是说,有一个视频地址为https://www.bilibili.com/vide...,你如果直接去requests.get这个地址,里面是不会有弹幕的,回想第一篇说到的携程异步加载数据的方式,B站的弹幕也一定是先加载当前视频的界面,然后再异步填充弹幕的。

接下来我们就可以打开火狐浏览器(平常可以火狐谷歌控制台都使用,因为谷歌里面因为插件被拦截下来的包在火狐可以抓到,同理谷歌也是)的控制台来观察网络请求了。

经过仔细排查之后,我找到了一个请求xml的,它后面跟了一个oid,查看它的响应内容之后可以发现它就是弹幕文件。

它的响应时间98毫秒,远超其它几个响应,所以说如果把弹幕直接放在视频页面,用户体验一定会很差。

找到弹幕了,爬取它很容易,但是我们想要是爬取固定av号视频的弹幕,而不是说随意去找一个oid来爬取弹幕,这样我们都不知道爬下来的弹幕是哪个视频的。

接下来我们就可以复制oid的117784982值,去视频页面搜索看看了,通过视频来获得它的oid再来爬xml弹幕就很方便了。

这次用了谷歌浏览器,在里面通过搜索oid果然搜索到相关的数据了。

其中cid是弹幕对应的id,aid对应视频av号。

先把这个页面爬取下来。

1 # encoding: utf-8
2
3 import requests
4
5 headers = {
6 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
7 'Accept': 'text/html',
8 'Cookie': "_uuid=1DBA4F96-2E63-8488-DC25-B8623EFF40E773841infoc; buvid3=FE0D3174-E871-4A3E-877C-10 A4ED86E20523155831infoc; LIVE_BUVID=AUTO8515670521735348; sid=l765gx48; DedeUserID=33717177; 11 DedeUserID__ckMd5=be4de02fd64f0e56; SESSDATA=cf65a5e0%2C1569644183%2Cc4de7381; 12 bili_jct=1e8cdbb5755b4ecd0346761a121650f5; CURRENT_FNVAL=16; stardustvideo=1; rpdid=|(umY))|ukl~0J'ulY~uJm)kJ; UM_distinctid=16ce0e51cf0abc-02da63c2df0b4b-5373e62-1fa400-16ce0e51cf18d8; stardustpgcv=0606; im_notify_type_33717177=0; finger=b3372c5f; CURRENT_QUALITY=112; bp_t_offset_33717177=300203628285382610"
9
10 }
11 resp = requests.get('https://www.bilibili.com/vide...',headers=headers)
12 print(resp.text)
拿到了内容我们就要从中解析弹幕id了,对于这种规则紊乱的网页,我们就不能用上一篇中Bs4解析了,而是使用正则表达式。

正则表达式最简单的使用方式其实就是直接match。

1 re.search(匹配规则,文本).group()

观察这里的内容,我们大致的匹配规则就有了。

cid={目标}&aid=av号

117784982就是我们的目标。

1 av_id = '67946325'
2 resp = requests.get('https://www.bilibili.com/vide...'+av_id,headers=headers)
3 match_rule = r'cid=(.*?)&aid'
4 oid = re.search(match_rule,resp.text).group().replace('cid=','').replace('&aid','')
5 print('oid='+oid)
先根据av号拿到视频页面,然后解析视频页面拿到oid,最后用oid去请求xml弹幕文件。

1 xml_url = 'https://api.bilibili.com/x/v1...'+oid
2 resp = requests.get(xml_url,headers=headers)
3 print(resp)
这样我们就完成B站弹幕爬虫了。

点赞
收藏
评论区
推荐文章
samzhangjy samzhangjy
4年前
小学生都能听懂的C++:第一讲 初识C++
视频链接:<https://www.bilibili.com/video/BV1hw411f7nz/请留下你的三连支持!!
Aidan075 Aidan075
4年前
被“词云”包围的冰冰会更好看吗?安排
(https://imghelloworld.osscnbeijing.aliyuncs.com/b299933deefc692934e8cc6141ab3894.png)大家好,我是小五🐶昨天「凹凸数据」发了一篇张同学投稿的文章《用Python爬取王冰冰vlog弹幕并制作词云(https://mp.weixin.qq.com/
Python进阶者 Python进阶者
4年前
手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)
大家好,我是Python进阶者。前言前几天雪球兄在Python交流群里分享了一个获取B站视频选集的Python代码,小编觉得非常奈斯,这里整理成一篇小文章,分享给大家学习。关于雪球兄,大家应该都熟悉了,之前他写过Python实战文章,好评如潮,没来得及看的小伙伴,可以戳这里了:之前也有给大家分享B站的一些文章,感兴趣的话可以看看这个文章,Python网络爬
Aidan075 Aidan075
4年前
用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?
尽管抄袭傍身,也没能阻挡《爱情公寓5》进击的脚步。最近爱情公寓电视剧微博发布了长达8分钟的揭幕视频,官宣新季将在2020正式开播。几位主演纷纷转发宣传,将爱情公寓5揭幕的话题送上了热搜。观众在经历过一次《爱情公墓》的诈骗后,能否接受《爱情公寓5》(下文简称爱5)?让我们来分析一下。获取数据首先,我选取了在B站上最热的视频,目前已经17
Wesley13 Wesley13
4年前
Android弹幕实现:基于B站弹幕开源系统(7)QQ、微信聊天气泡样式的弹幕
Android弹幕实现:基于B站弹幕开源系统(7)QQ、微信聊天气泡样式的弹幕在附录文章得基础上,改进普通文本弹幕,实现一种特殊效果的文本弹幕,像QQ、微信一样的带有气泡背景的弹幕。实现的重点是在SpannedCacheStuffer。同时要准备若干需要衬在文本弹幕背景部分的.9.png图片。上层Java代码:
Stella981 Stella981
4年前
Kubernetes on Raspberry Pi
视频https://www.bilibili.com/video/av29593263/(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.bilibili.com%2Fvideo%2Fav29593263%2F)https://www.bilibili.com/vide
Stella981 Stella981
4年前
Python爬虫入门教程 32
1\.B站博人传评论数据爬取简介今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看。网址:https://www.bilibili.com/bangumi/media/md5978/?fromsearc
Wesley13 Wesley13
4年前
3行!仅3行代码就能抓取B站(弹幕、评论、用户)数据
今天介绍一个获取B站数据的Python扩展库bilibili\_api可以获取的数据包括:video视频模块user用户模块dynamic动态模块这次用“RunningMan”十周年特辑的视频,来做个获取弹幕的Demo。我是对比没有对比,就没有伤害,就像最近的“哈工大”某学生和“浙大”某
Wesley13 Wesley13
4年前
B站运维团队成长的血泪史
胡凯,bilibili运维负责人,曾经就职于金山软件、金山网络、猎豹移动,负责运维相关工作。Bilibili是国内最大的年轻人潮流文化娱乐社区,银河系知名弹幕视频分享UGC平台。95后二次元新人类的追捧,让以视频弹幕、UP主闻名于世的bilibili(以下简称B站)愈发火爆,无数年轻人通过电脑、手机、电视等终端设备在B站上追番、看
Easter79 Easter79
4年前
TensorFlow有Tensorboard,MindSpore框架如何做可视化?
5月12日,机器之心联合华为昇腾学院开设的线上公开课《轻松上手开源框架MindSpore》第6课完成,王越讲师为大家带来了主题分享《MindSpore可视化工具使用指南》,第6课回顾视频如下:https://www.bilibili.com/video/BV1et4y117aW​www.bilibili.com(https://
Stella981 Stella981
4年前
Creator 2.2.0 终于等来了这款Shader组件神器!一招搞定Effect特效
先看下视频演示:!file(https://oscimg.oschina.net/oscnet/b5ec2c0b961876d8e0be8d4902570bb2537.jpg)视频链接:https://www.bilibili.com/video/av74066806/(https://www.oschina.net/action/GoToL