您现在所在的位置:首页 >关于奇酷 > 行业动态 > 实战丨你永远不知道多少人在哔哩哔哩弹幕,但Python知道!

实战丨你永远不知道多少人在哔哩哔哩弹幕,但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,好绝一鬼才!