代码改变世界

对B站各种数据进行抓包分析

2019-07-17 09:22  Xiao_Chen  阅读(7668)  评论(1编辑  收藏  举报

写在前面:现今绝大多数的网站都使用js来加载数据,传统的请求方法很难再奏效,对动态数据的爬取现在大都分为两类爬取方法:

1. 使用Selinium等自动化测试软件去模拟浏览器,这种方法几乎可以适用于所有网站,但是缺点是效率速度太慢了,如果有别的爬取方法,优先采用其他。

2. 对网页直接进行抓包处理,这种方法效率相对较高,唯一的困难就是如何获取api,特别是某些经过加密的例如网易云(有时间再写个个吧),有时候很难去解析。

 

前瞻:以 https://www.bilibili.com/video/av39807126 为例,

        

 

评论:打开后就是一个普通的B站视频,在点击评论下一页时,Chrome网络查看,

 

得到https://api.bilibili.com/x/v2/reply?callback=jQuery17204374912045669581_1563294492420&jsonp=jsonp&pn=2&type=1&oid=39807126&sort=2&_=1563294527125 这一长窜东西。当然直接肯定是打不开的。我们不要js请求,将 js 参数去掉,变成https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn=2&type=1&oid=39807126&sort=2&_=1563294527125

可以得到 json 格式的评论。其中参数 pn 是评论的页数 ; oid 就是视频网址后面的 av那一串数字;sort一看就清楚是排序方式,0是按时间排序,2是按热度;最后面的参数似乎没有什么影响。

 

评论回复:就是评论后别人给你的回复的api。在有评论折叠的地方点击 点击查看 ,然后查看网络

同上可以得到api: https://api.bilibili.com/x/v2/reply/reply?jsonp=jsonp&pn=1&type=1&oid=39807126&ps=10&root=1384748331&_=1563295273867

最后的字符串可以不要,参数ps是啥我也不太清楚,想知道的小伙伴可以去看下 js 源码,应该能解出来;root是原始评论人的 rpid。

 

个人信息:

https://api.bilibili.com/x/space/acc/info?mid=264980&jsonp=jsonp,这个就不说了,和上面一样,点击用户直接查就可以找到了。

 

弹幕:我是通过 fiddler 获取的,Chrome上我好像没有看到?在fiddler选择框中输入 select xml 选中文件如下:

 

得到:http://api.bilibili.com/x/v1/dm/list.so?oid=103015334

研究了下这个是实时弹幕的api,一般视频上限就是1000,个别比如说很火的视频可能会上3000或者更高。