hostwj 发表于 2020-6-29 15:24

记一次查找bilibili视频API的经历

今天逛论坛的时候发现了一篇关于B站视频爬取的帖子

求助抓B站视频接口(出处: 吾爱破解论坛)

B站视频的爬取已经多到烂大街了,原理也有很多种,最常见的还是用ffmpeg或者别的方法将视频流碎片m4s合并起来
而这个API居然直接可以爬取到完整的视频
api_url = 'https://api.bilibili.com/x/player/playurl?cid={}&avid={}&qn={}&otype=json&requestFrom=bilibili-helper'

因此,我去抓包试了下,但是对API的来源同样难以找到

在b站找了下最近新的API分享:

https://www.bilibili.com/read/cv3430609
里面没有关于api.bilibili.com/x/player/playurl的内容
根据经验我尝试从B站个人主页下手
经过一番努力,我成功找到了以下内容



甚至发现了奇怪的东东




但是很可惜,因为其中一点关于视频播放的东西都没有.


无可奈何走一遍别人走过的路,老老实实点开视频抓包~
首先想到的当然还是和video有关的


很可惜并没有很重要的内容,于是转而去研究play.so,同样没有重要的数据,但是绝对在里面有重要的内容,不可奈何打不开


这就很难下手,于是尝试了对m4s文件分析一下
对文件大小排序,拿到源文件片段



改了改其中的参数,列如
deadline: 1593419974
发现结果没有两样,只是片段m4s的地址,又试着将参数删了部分,最后摸索出来如果有nsb=1就会出403

如果没有就会出949,显然没有其他可以研究的路了

看了看m4s的乱码内容,没有丝毫头绪了,点开Initator,点开其中一个js

突然找到的希望,这肯定不是凭空来的,又找了下js内的内容

发现这种API是有很多类似的,应该是为了PC,app等不同的配备,还有新版旧版的区别
翻上去一看是我自己的bilibili Evolved脚本代码,白高兴一场,但是同时也明白了肯定在什么地方会有这个API,或者是旧版本的接口,或者是其他地方里面拼接的比较隐蔽,

这时候加载的视频也放完了

看着刷出来的推荐视频的链接,突然想到,会不会在这个时候的视频链接没有被封装直接是API,
找了下最后一段时间抓到的包

果然抓到了!
打开内容看了一眼

居然是很多个片段的地址!!!
由此终于找到了API的来源:源自视频加载完后的视频推存,这时候会调用的是完整的裸露的API,可以直接调用来使用爬虫下载

心急吃不了热豆腐,虽然js中一定可以分析出这个API,但是毕竟是动态的加载,加载完之后的视频推荐或者跳转到下一个视频可能就是关键~

api_url = 'https://api.bilibili.com/x/player/playurl?cid={}&avid={}&qn={}&otype=json&requestFrom=bilibili-helper'

hostwj 发表于 2020-6-29 17:17

魔道书生 发表于 2020-6-29 16:06
还是要像大佬学习啊 就像做数学题一样 我一开始分析的时候从点击播放开始抓 啥玩意也没
后来从刷新页面开 ...

从主页下手完全是因为被b站那个API总结,看完感觉全是从主页里面抓到的

关于为什么有的网页访问是403,但是爬虫可以下载
可以看爬虫源码:

首先你是带着Referer去访问的,而且加上了你登录的SESSDATA,并且带有headers所以会认为你是正常用户去访问,所以才能访问到内容
而为什么可以下载,
建议打印一下 json.load 之后的内容,就知道直链内容是什么了

然后是这个API肯定是在js里面可以找到的,在你刚刚点开B站某个视频的时候,你肯定要知道视频碎片的加载顺序,和m4s的地址
在js里面肯定封装好了,你请求的时候js会反馈给你,而且不会一下子所有的信息都加载,视频片段会根据你的浏览位置,视频流片段的加载出来,但是在浏览器看起来就像完整的视频
所以在js里面肯定会有类似最后找到的API的东西,毕竟能得到视频直链的API一般会稍微封装或者加个验证机制的,不然还要大会员干啥{:1_886:}

我也不是大佬,真的大佬都在弄js注入破解反反爬虫了,我这只是找到了方便的下载方法的来源而已.{:1_932:}

hostwj 发表于 2020-6-29 16:55

zdnyp 发表于 2020-6-29 16:26
播放完了再加载播放列表...有点不科学

实际上是在播放完之前几秒触发了js操作然后预加载

此用户无法显示 发表于 2020-6-30 21:01

厉害厉害,我想知道最近b站在网页播放中新添加的   云屏蔽弹幕   api是怎么样的,我现在只知道b站的弹幕api,分享一下了,网上也有很多分享了吧

> https://comment.bilibili.com/cid.xml
> https://api.bilibili.com/x/web-interface/view?aid=
其中cid或者aid就是每个视频的编号,每p都不同,在视频网页查看源代码,查找cid也就行了,记得以前还找到过一个精确计算视频数据的api,也有cid的,当然也有人叫他aid,控制台抓出来的叫aid,现在用的大部分都是下面那个api

xjk2008 发表于 2020-6-29 15:48

详细心得分享,感谢!!

魔道书生 发表于 2020-6-29 16:00

妈呀 刚发完贴 下午打开论坛 第一个就是“记一次分析B站API的过程”谢谢大佬了!
对了大佬 你上面说JS里面可以找到API具体指的是?

魔道书生 发表于 2020-6-29 16:01

还有为毛要从主页下手呢?

魔道书生 发表于 2020-6-29 16:06

还是要像大佬学习啊 就像做数学题一样 我一开始分析的时候从点击播放开始抓 啥玩意也没
后来从刷新页面开始抓 信息多了点 原来播放完了还有惊喜 还有大佬我想问一下 这个API得到的链接直接访问的话是453错误 还是啥错误 但是py里面能直接下载 迅雷里面输入这个直链也不行 这是为啥?

linguo2625469 发表于 2020-6-29 16:19

谢谢大佬 学习了

吾爱不再 发表于 2020-6-29 16:22

谢谢分享!支持一下!

zdnyp 发表于 2020-6-29 16:26

播放完了再加载播放列表...有点不科学

zdnyp 发表于 2020-6-29 17:01

hostwj 发表于 2020-6-29 16:55
实际上是在播放完之前几秒触发了js操作然后预加载

刚开始播放的时候,应该也有个播放列表吧,不然按照啥顺序播放...
页: [1] 2 3 4 5
查看完整版本: 记一次查找bilibili视频API的经历