这是2018.5.27的文章,爱奇艺的视频未来接口可能会变动,所以本文仅供参考,且不包含代码实现
工具
带开发者工具的浏览器一只,本人使用超级厉害的Chrome
前言
一般的视频网站,比如哔哩哔哩,优酷,网页视频播放器的流程是先进行一次XHR请求获取视频分段列表,然后依次加载这些内容,比如哔哩哔哩的是这样的:
优酷的是这样的
但是爱奇艺的有点不一样,你在XHR栏目无法抓取任何相关的数据,或者说,只能抓到请求一条分段的链接,如下…
原理
就拿 DARLING in the FRANXX第一集举例
打开开发者工具,刷新页面,选择筛选JS文件的选项
把所以的js文件点一遍,找到结果类似与图中的js文件,查看其详细信息,看到链接了没有?就在”fs”中
这时候我们在看XHR中输出的信息
会发现出现了两个和第一个分段有关的视频,第一个请求获取了第二个请求的链接,而第二个则是真正的分段视频链接,而第一个链接比js文件里的那个链接的请求参数多了一些,仔细观察比对,多出来的参数值要么是固定的,要么是从Cookie中来的,要么就从那个请求JS链接里的参数值,这些都是会改变的所以在这里就不做分析了
流程总结
发起请求获取一个包含分段链接请求地址json数据的js文件
对分段链接请求地址添加一些参数,发送出去以获得真正的分段视频链接
通过分段视频链接获取分段视频
编写下载程序的思路
和之前我写的下载b站视频思路的文章里差不多,记得把http请求的header加全了按流程走一遍基本上就不会有什么问题
我写了一个程序放到github上了,把那个请求js文件的链接,网页链接,保存路径写全了就可以下了,但是本地要有bash环境和ffmpeg
注意,对于拼接请求下载地址的链接,存在失效时间,貌似是在两三分钟后会失效,如果不注意的话会导致分段丢失