爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

说明:

这解析方式是基于爱奇艺H5播放方式的。

准备工具:(私信小编007自动获取大量Python学习资料)

1) Fiddler(抓包工具)

2) 谷歌浏览器

3) Notepad++(文本编辑工具)

4) Webstorm(JS调试工具)

5) Postman(HTTP请求工具)

6) UltraCompare(文本比较)

正文:

在使用谷歌浏览器之前,为了避免各种缓存的影响,务必先清除Cache,Cookie……

打开其中一个爱奇艺的视频。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

使用fiddler 进行抓包,然后把对分析无用的图像格式文件、css之类的过滤掉。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

等待视频开始缓存,为了保证已经加载视频,就等待广告过完之后再进行分析数据。

……接下来就要开始分析需要的数据,当然首先要做的就是先再fiddler里面找到捕获的视频资源,可以通过一下两种方式找到所需视频资源:

1)Body项,可以通过找数据长度比较长的项。

2)Content-Type项,文件流格式一般使用application/octet-stream类型。综合以上方式会比较好。以下是抓包所得结果。(视频开始播放后,就可以停止继续抓包了,因为这东西挺占后台的。)

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

根据以上说的方法1找到下面的项

这是找到的一个看起来像是视频的文件,所以你可以尝试把响应的数据(Body)保存起来看看是不是你要的视频文件。(当然这可能无法播放)

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

播放结果如下

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

显然这不是所要的视频资源。

所以你可以不断尝试,直到找到你想要的视频缓存。……然后你就能找到以下这个项

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

可惜的是,这个文件却是无法播放的,但这并不代表他不属于这个视频资源的。但是如果找不到这个,也没问题的,你会找到下一片段的视频资源。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

当我们知道图片的下面一项的时候,你就很快能找到剩余的片段了。

为什么?因为你可以发现这两个请求的URL路径一样,而且下面的哪一个片段是不完整的视频,所以不可否认的是,爱奇艺把视频片段分割成了很多片段。

什么?你觉得牵强?对,确实是这样的。但是不如这么想,如果你觉得这不是可疑的视频,那么当你不能在Fiddler里面找到除了这些片段的可疑播放的视频的时候你就不会这么想了,因为不管怎么样,你要相信fiddler已经把视频捕获到了。而且视频肯定也是存在的,不然你怎么能再页面取观看呢对吧。既然这样,那么我们就分析382这一项。要干什么呢?当然首先是看下这个地址。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

这恐怖的GET请求,一大堆符号。

GET /r/bdcdngdct.inter.71edge.com/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0&range=8192-10431487HTTP/1.1

我们要做的就是构造这一串符号,并且是有依据的构造。从前面往后看,寻找最后一层目录,得到服务器上的文件是这个

611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0&range=8192-10431487

为了构造他,肯定是先找到这串字符最先出现的地方了。先忽略?号后面的参数,不如先找到611f0244cfe1a64d165b2f630be2e9fc(因为一眼看去他是最突出的)这是哪里得到的吧。这就要用到fiddler强大的搜索工具了。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

我们要找的就是从前往后寻找最早出现这串字符的项。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

然后进一步寻找这一串字符出现在哪里。(也就是在一下红框里面各自寻找这一串字符)

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

那么既然这一串字符出现在这里,那么必然要先知道这一项的URL,并且构造他

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

GET/jp/dash?tvid=1294428000&bid=300&vid=5e54f1fec36034f67521abf755dd3f93&class="lazy" data-original=01010031010000000000&vt=0&rs=1&uid=&ori=pcw&ps=0&tm=1535880031201&qd_v=1&k_uid=836c674bfa7e7387a323d314bfb4a875&pt=0&d=0&s=&lid=&cf=&ct=&authKey=4c31a25989ea7e678b670125e6ee5acf&k_tag=1&ost=0&ppt=0&dfp=&locale=zh_cn&prio=%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D&pck=&k_err_retries=0&k_ft1=549755813888&bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D&callback=Q838114a04d5d4d3adb265513f3244a36&ut=0&vf=a07fc56691bd8558b5e9f23e9119b36aHTTP/1.1

又是一长串字符了。整理参数如下tvid=1294428000

&bid=300
&vid=5e54f1fec36034f67521abf755dd3f93
&class="lazy" data-original=01010031010000000000
&vt=0
&rs=1
&uid=
&ori=pcw
&ps=0
&tm=1535880031201
&qd_v=1
&k_uid=836c674bfa7e7387a323d314bfb4a875
&pt=0
&d=0
&s=
&lid=
&cf=
&ct=
&authKey=4c31a25989ea7e678b670125e6ee5acf
&k_tag=1
&ost=0
&ppt=0
&dfp=
&locale=zh_cn
&prio=%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D
&pck=
&k_err_retries=0&k_ft1=549755813888
&bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D
&callback=Q838114a04d5d4d3adb265513f3244a36
&ut=0
&vf=a07fc56691bd8558b5e9f23e9119b36a

看英文也可以大概的知道authKey 可能就是加密方式。所以你要在fiddler搜索authKey,(其实我这么做是为了找到构造这个链接所对应的js

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

这是最早出现authKey的地方,为了方便分析,把他复制到notepad++里面分析。

只找到一个结果。而且回头看一下这些参数是不是很熟悉呢?大部分的参数他都已经给出来了。authKey:n(n("") + I + A),当然这里面都是Js加密的结果,所以我们只要找到函数n和A和I的值就能构造出authKey了。当然我们不可能吧这个js代码分析一遍,所以我们就要借助谷歌浏览器的调试工具了。谷歌浏览器按F12弹出工具。并且在Sources找到这个js文件,并把他格式化左下角的{},(为了方便分析)

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

找到authKey,并给他做断点。当然如果你能够顾及的话,你可以同时分析多个参数。然后你要刷新页面(可以直接按F5刷新),让他停在断点处。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

刷新后停在e处,你也可以直接让指针触碰函数n,然后你就能看到

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

你可以直接点进去看是哪一个函数,显示是这个函数

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

看来这个n是调用了一串这些函数返回的结果。u(o(c(e),e.length * g))继续往前面找函数c(),因为停留在这个,再了解作用域这些东西可以知道,这个函数c就是在这里面,下图

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

看来函数c是最底层了(也就是说没有再往下调用的函数了(自定义))下面到函数o,再往前看就能找到函数o了。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

最后就是u了,在上上图就能看到函数u了,所以,这个参数authKey就可以构造了,现在要做的就是要找到调用这些参数所传递的参数。,就是I和A

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

看参数名字tm大概可以知道这是一个时间戳,而且查看I也发现

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

,所以这很大概率就是时间戳。

而A就是参数tvid的值。我们先返回去fiddler看下这个tvid在前面的链接有没有提到过。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

发现第一个链接就有这串数字

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

所以我们就可以从这个链接得到A了,这个链接就是爱奇艺视频的请求地址。

下一步&k_uid=836c674bfa7e7387a323d314bfb4a875

在进行这一步之前不妨先看下这还缺什么

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

通过对比发现就下面蓝点那五个参数是上面没有的。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

所以前面哪一些我就不讲了(因为可以通过一样的道理分析js就能得到参数的依据),接下来我要讲的就是获得以下五个参数。

首先是这个

k_ft1=549755813888

首先分析这个,要做的当然就是先找一下后面的那一串数字在fiddler在更前一点的链接里面有没有找到辣。

可惜的是没有找到。。那么我们只能去寻找他的参数名了“k_ft1”

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

事实上你不一定看到这些就马上用谷歌浏览器的开发者工具取调试他,你可以在notepad++里面看一下,找一下这个函数,比如这里面这些函数都是没有经过压缩函数名,这样可以直接取寻找这个函数,然后大概分析一下他的含义,也就是他是干什么的。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

所以这个参数解决掉了。

第二个参数:bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D

同样的方法,先搜索参数值,但是注意的是这里面的参数值是通过urlencode的,所以先解码再寻找。

可以使用fiddler里面的textwizard工具来解码

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

发现并没有这个,但是你可以搜索里面的version或者dfp,为什么呢?因为这很有可能是类似的js片段。

{‘version’:e.version,‘dfp’:e.dfp}

,我建议搜索dfp。但是说道理,我们也可以直接搜索参数名bop而不纠结与参数值。

然后有意思的是,我们想太多了,发现其实都在这里。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

所以这就完了,事实上这里面就有几个函数了。

那么剩下的callback vf可以通过

callback大家可以使用谷歌浏览器的开发者工具调试一下,看一下什么时候获得了callback。(图忘了截,所以就当做是练习好了),

下面是vf

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

然后大家可以吧刚才那些参数整理一下就行了。这是一个漫长的工作,所以,我就不帮你们整理了。

到现在,我们已经构造出来了

GET/jp/dash?tvid=1294428000&bid=300&vid=5e54f1fec36034f67521abf755dd3f93&class="lazy" data-original=01010031010000000000&vt=0&rs=1&uid=&ori=pcw&ps=0&tm=1535880031201&qd_v=1&k_uid=836c674bfa7e7387a323d314bfb4a875&pt=0&d=0&s=&lid=&cf=&ct=&authKey=4c31a25989ea7e678b670125e6ee5acf&k_tag=1&ost=0&ppt=0&dfp=&locale=zh_cn&prio=%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D&pck=&k_err_retries=0&k_ft1=549755813888&bop=%7B%22version%22%3A%227.0%22%2C%22dfp%22%3A%22%22%7D&callback=Q838114a04d5d4d3adb265513f3244a36&ut=0&vf=a07fc56691bd8558b5e9f23e9119b36aHTTP/1.1 

这样,我们就能得到一开始寻找的字符串:611f0244cfe1a64d165b2f630be2e9fc

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

而要知道的是,我们的目标就是下面这个链接,上面的链接只是为了寻找字符串 611f0244cfe1a64d165b2f630be2e9fc

GET /r/bdcdngdct.inter.71edge.com/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0&range=0-8191HTTP/1.1 

通过简单观察发现,那个链接不仅得到了字符串611f0244cfe1a64d165b2f630be2e9fc,还得到了很多参数。不如比较一下看还缺什么。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

通过对比发现还确实缺了不少。不如先从key开始找

key=0433de19d0c1b75057f6fc64c676e6ded

寻找0433de19d0c1b75057f6fc64c676e6ded,得到下面这一项

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

发现里面的链接就是很完整的好不好。

https://bdcdngdct.inter.71edge.com/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?key=0433de19d0c1b75057f6fc64c676e6ded&dis_k=c17fe85c329bf7dcd883071bb8d55fa5&dis_t=1535880044&dis_dz=CT-GuangDong_GuangZhou&dis_st=42&class="lazy" data-original=iqiyi.com&uuid=7908d205-5b8bab6c-191&rn=1535880043829&qd_tm=1535880032356&qd_tvid=1294428000&qd_vipdyn=0&qd_k=a07fc56691bd8558b5e9f23e9119b36a&cross-domain=1&qd_aid=220327201&qd_uid=&qd_stert=0&qypid=1294428000_02020031010000000000&qd_p=7908d205&qd_class="lazy" data-original=01010031010000000000&qd_index=1&qd_vip=0&qyid=836c674bfa7e7387a323d314bfb4a875&pv=0.1&qd_vipres=0

所以我们要的就是要构造下面

GET /videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?qd_tvid=1294428000&qd_vipres=0&qd_index=1&qd_aid=220327201&qd_stert=0&qd_scc=ec9c19fe1c7863a46bd3245b238c2745&qd_sc=e1e1493d64de4db9c4d6c27f8220b24c&qd_p=7908d205&qd_k=a07fc56691bd8558b5e9f23e9119b36a&qd_class="lazy" data-original=01010031010000000000&qd_vipdyn=0&qd_uid=&qd_tm=1535880032356&qd_vip=0&cross-domain=1&qyid=836c674bfa7e7387a323d314bfb4a875&qypid=1294428000_02020031010000000000&qypid=1294428000_02020031010000000000&rn=1535880043829&pv=0.1&cross-domain=1HTTP/1.1 

分开参数

/videos/v0/20180831/44/87/611f0244cfe1a64d165b2f630be2e9fc.f4v?
qd_tvid=1294428000

&qd_vipres=0
&qd_index=1
&qd_aid=220327201
&qd_stert=0
&qd_scc=ec9c19fe1c7863a46bd3245b238c2745
&qd_sc=e1e1493d64de4db9c4d6c27f8220b24c
&qd_p=7908d205
&qd_k=a07fc56691bd8558b5e9f23e9119b36a
&qd_class="lazy" data-original=01010031010000000000
&qd_vipdyn=0
&qd_uid=
&qd_tm=1535880032356
&qd_vip=0
&cross-domain=1
&qyid=836c674bfa7e7387a323d314bfb4a875
&qypid=1294428000_02020031010000000000
&qypid=1294428000_02020031010000000000
&rn=1535880043829
&pv=0.1
&cross-domain=1

这一次发现和之前的参数就就差不多了,比较一下

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

看来就剩下后面的几个参数了。当然你也可以一个参数一个参数的找依据,但是有时候这是不必要的,你可以通过在不同的爱奇艺视频网页请求抓包,把一些不变的量你就当然是常量就行了。当然这也有弊端比如说这样你就无法了解更深一层的含义。或者这些参数有可能就是破解vip限制的关键。(讲道理这些参数是什么意义我就没研究,所以这个破解vip我是随便说的,就是为了表达这样一个意思,就是这些参数对仅仅解析这些视频可能是无关重要的,但是如果你不仅仅只要这些,这些就很重要了)。

后面的几个参数我不需要讲,因为这个前面的一些参数值有重复。

比如&qyid=836c674bfa7e7387a323d314bfb4a875就是cookie的QC005。

所以后面就大概讲一下如何验证你构造出来的结果对不对。

搬出webstorm了,

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

这个软件可以帮助你运行js脚本,这样你就能运行上面的函数得到结果。然后你可以使用postman可以帮助你提交数据。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!

至于这些软件如何使用我就不讲了。

爱奇艺视频H5解析分析过程,一篇来自顶级Python爬虫师的笔记!


分享到:


相關文章: