实战丨你永远不知道多少人在哔哩哔哩弹幕,但Python知道!
来源:
奇酷教育 发表于:
Python爬虫爬取Bilibili弹幕实战。
聚合了海量先锋年轻人的B站,月均活跃用户达到1.1亿。
提到B站,你会想到什么?
二次元?鬼畜?看番?diss?还是——弹幕?
曾经错位时空不同的人,在同一个视频下用弹幕进行了交流。
而发这条弹幕的人,可能甚至是五六年前发的。
你永远不知道年轻人有多少梗,不知道有多少人在弹幕,但是——
Python知道。
Python爬虫爬取Bilibili弹幕
这是Python爬虫爬取Bilibili弹幕实战。
有人说,B站因弹幕的体验感而一骑绝尘。
飞逝的弹幕仿佛能沟通一切。
那么,B站上一个视频的弹幕最多会有多少?
2000条?还是更多?
这么多数据,B站肯定是不会直接把弹幕和这个视频绑在一起的。
也就是说,有一个视频地址为https://www.bilibili.com/video/av67946325,你如果直接去requests.get这个地址,里面是不会有弹幕的,因为B站的弹幕是先加载当前视频的界面,然后再异步填充弹幕的。
接下来我们可以打开火狐浏览器(平常可以火狐谷歌控制台都使用,因为谷歌里面因为插件被拦截下来的包在火狐可以抓到,同理谷歌也是)的控制台来观察网络请求了。
经过仔细排查之后,找到了一个请求xml的,它后面跟了一个oid,查看它的响应内容之后可以发现它就是弹幕文件。
它的响应时间98毫秒,远超其它几个响应,所以说如果把弹幕直接放在视频页面,用户体验一定会很差。
找到弹幕了,爬取它很容易,但是我们想要是爬取固定av号视频的弹幕,而不是说随意去找一个oid来爬取弹幕,这样我们都不知道爬下来的弹幕是哪个视频的。
接下来我们就可以复制oid的117784982值,去视频页面搜索看看了,通过视频来获得它的oid再来爬xml弹幕就很方便了。
这次用了谷歌浏览器,在里面通过搜索oid果然搜索到相关的数据了。
其中cid是弹幕对应的id,aid对应视频av号。
先把这个页面爬取下来。
正则表达式最简单的使用方式其实就是直接match。拿到了内容我们就要从中解析弹幕id了,对于这种规则紊乱的网页,我们就不能用上一篇中Bs4解析了,而是使用正则表达式。
观察这里的内容,我们大致的匹配规则就有了。
cid={目标}&aid=av号
117784982就是我们的目标。
先根据av号拿到视频页面,然后解析视频页面拿到oid,最后用oid去请求xml弹幕文件。
这样我们就完成B站弹幕爬虫了。
Python,好绝一鬼才!