关于bilibili视频下载的说明
纯文字,不配图,给思路,无代码。愿意看的就继续往下读吧。
在电脑浏览器上操作。。。
打开任意一个无需会员的视频播放界面,ctrl+u用来查看网页源代码,F12用来查看网页刷新时的发包情况。
在网页源代码界面,视频标题在title标签下,ctrl+f搜索'window.__playinfo__=',就能定位到资源界面,标签为'script'。值得说明一下的是bilibili的视频和音频是分别下载的。’window.__playinfo__=‘关键词后面的内容是一个json字典,解析之后视频选择["data"]["dash"]["video"][0]["baseUrl"],也就是第一个baseUrl,因为这个清晰度的视频链接能用MP4保存,其他清晰度的好像不是按照这种格式编码的。而音频链接保存在["data"]["dash"]["audio"][0]["baseUrl"]。这一步使用程序爬取的话设置一下请求头的user-agent就可以了,cookies设置意义不大。请求方式为get,请求地址为视频所在的url,也就是浏览器顶部的链接。
拿到链接后,开始构造get请求,请求地址为上一步拿到的音视频链接,建议设置一下请求头的user-agent和referer,以及cookies。其中referer的值便是浏览器看视频界面的url。响应的content便是我们需要的二进制数据,直接写入保存就好了。分别请求视频链接和音频链接,保存数据。这个时候我们已经完成了视频和音频的分别爬取,下一步我们需要把视频和音频进行合成。
我们使用ffmpeg.exe来进行音视频合成。使用命令行:“{ffmpeg.exe地址} -i {视频文件保存地址} -i {音频文件保存地址} -acodec copy -vcodec copy {合成视频保存地址} -loglevel quiet”。下载ffmpeg?百度找一下官网就可以了。如果你下载下来配置了系统path的话,就直接用ffmpeg来代替ffmpeg的地址。呃,合成视频的保存路径一定要区分开原有文件的名字。花括号只是为了注意区分,实际输入的时候是不需要{}的。
这样的话我们就完成了对视频的下载。当然,这个只对普通非会员视频有用。要注意的是番剧和普通视频的爬取大致思路都差不多,但是要注意'window.__playinfo__='所在的'script'可能是不一样的。大会员视频使用非会员身份访问是拿不到'window.__playinfo__='的,但是可以用selenium加上符合selenium格式的cookie实现免登录b站。
以上笔记仅用作学习和研究,提示到这里了。当年我研究时候有一个引路人,他的代码给了我很大的启发,但是收藏的视频失效了,没办法给出来。哦,如果你想听其他平台的付费音乐,也可以来找b站。最后说一句,视频标题里有时候含的字符是不符合windows文件夹创建规范的,比如“|”就会引起文件夹创建报错。