7

关于bilibili视频下载的一些小思路

(基于b站官方接口实现)


由于B站近期某些蛋(chou)疼(feng)表现,某十八线女团不知名野站(我无聊作死的地方)为了稳健,需要备份一份所有视频。然而市面上的各路下载软件(说的就是你,唧唧),并不支持批量下载,you-get也不能爬空间获得播放列表......,翻了N多文章都是用B站前几年开放的api实现的,然而本弱鸡没有id,接口根本拿不到,文档所在的 bilibili.cn 也已经凉了。

这时找到这篇文章

https://blog.csdn.net/chaoping315/article/details/80106141

1. 获取账号所有视频avid

空间接口可以正常get使用

https://space.bilibili.com/ajax/member/getSubmitVideos?mid=97678687&pagesize=30&tid=0&page=1&keyword=&order=pubdate

这个接口很好抓,并且不需要任何验证
clipboard.png
可以从中轻易拿到视频数和页数

之后文章是通过kanbilibili的接口解决下载问题的,但是其中的cid是从网页中爬取,需要解析出json.....
直接访问B站视频页也有cid字段,但是食用方法和kanbilibili几乎一毛一样,作为一个正则都懒得用的咸鱼,怎么能忍~
kanbilibili的视频下载请求链接竟然是长春源...
果断抛弃接口

(废话结束)

2. 获取视频cid

B站视频有av号,但是每个av号下不一定只有1p,所以B站用cid来管理视频的真正id
扒官方新html5播放器接口发现交互满满的都是ajax

https://api.bilibili.com/x/web-interface/view?aid=170001

获取cid的接口
clipboard.png
这是一个巨长的接口,不过也给我们特别详细的提供了视频信息,以及各个分p的信息
在pages里,可以拿到每p的cid,有了cid,就可以从各路方法请求下载地址

clipboard.png
从这里记下cid

3. 获取视频下载链接

这里kanbilibili的接口也是好用的,但是因为测试时抽风过,又是长春的节点,所以选择还是扒那个播放器的接口

https://api.bilibili.com/x/player/playurl?avid=38735633&cid=68089009&qn=80&type=&fnver=0&fnval=16&otype=json

获取视频下载链接接口

这里面主要的是cid和avid
cid就是刚才获取的,avid就是av号
这里的qn代表质量(实际上没啥用),因为除了大会员专向的所有质量的链接都有
fnver fnval我也不知道干啥的,但是不带就只能获取480p的视频地址

clipboard.png
这里面的16 32 40 80 112代表视频质量,数字越大,视频质量越高

在这里就能拿到下载地址和视频质量信息了
然后就可以愉快下载
.......????

clipboard.png
心凉半截的403

403了,就多半是header的问题
这时我们回到抓包,随便打开一个视频

clipboard.png
clipboard.png

请求头里的origin referer看起来是最可能搞事的
那就直接复制大法,伪造一个试试

clipboard.png
正确拿到了文件(实际上只伪造erferer就可以)

链接直接丢下载软件,伪造下头就可以开始下载(我选择了aria2)
因为写的就是个一次性脚本,所以不分享代码怎么构思的了,写的没法看,一堆bug没处理

想看的可以移步这里源代码地址
想下载打包好的可以移步这里打包文件地址

第一次发博客,废话连篇,请求各位的指正~~~


shabby
18 声望1 粉丝