爬虫技巧-西瓜视频MP4地址获取

记录一下西瓜视频MP4地址的获取步骤css

目标:前端

指定西瓜视频地址,如 https://www.ixigua.com/a6562763969642103303/#mid=6602323830,获取其视频MP4文件的下载地址node

 

如下使用chrome浏览器ios

开始分析:git

首先在浏览器中打开视频页面,打开审查元素(右键-> 审查元素  或 F12)并刷新页面,查看network选项中抓到的包github

技巧1:ajax

因为咱们获取的是视频文件的下载地址,而视频文件通常比较大,因此能够在network的包列表中使用 Size 排序一下 查看最大的几个包算法

如图:chrome

这里咱们很容易就能肯定视频文件的地址 json

http://v11-tt.ixigua.com/5cc4c0ae0f7d6f87014dc0f0058157e0/5bcc7300/video/m/220f87599d445a14a53803fd01d86816e971157c7a70000cab5121742cc/

你获得的地址和我获得的可能不同,不过url路径中的最后一串字符串应该是同样的

下面咱们就要寻找这个地址是从哪里获取的,通常作法就是截取url中比较有表明的部分(这个看经验,你应该懂的)来搜索,搜索可使用chrome审查元素的Search功能

这个搜索会查找network栏中全部包的响应内容,若是搜到的话,咱们就能够肯定视频文件地址的来源。

为何这么作呢?

按照正常的想法,首先这个视频文件的获取请求是浏览器发起的,那么浏览器确定在发起前就获得了视频文件的地址,那么地址存在什么地方呢?通常来讲,不外乎直接写

在网页源代码中或者使用一个ajax请求之类的获取一下视频地址,因此这个地址确定存在于咱们目前所能看到的network列表中的包之中。

BUT,在这个例子中,搜索结果为空。尝试各类截取方法  好比 220f87599d445a14a53803fd01d86816e971157c7a70000cab5121742cc、5cc4c0ae0f7d6f87014dc0f0058157e0、v11-tt.ixigua.com

都搜索不到。

好吧,既然搜不到,那咱们就用暴力一点的办法,好在这个网页的network包列表并很少,咱们就一个一个找就行了,找的过程通常能够忽略css、图片、多媒体等文件,

优先查看json格式的文件

下面人工查看中。。。

查看一遍以后呢,我发现了一个可疑的连接

https://ib.365yg.com/video/urls/v/1/toutiao/mp4/v02004bd0000bc9po7aj2boojm5cta5g?r=048136401358795045&s=3128215333&aid=1190&callback=axiosJsonpCallback1&_=1540123000124

首先,url就很可疑,里面包含各类敏感关键词,如 mp四、urls等

其次,内容可疑:

video_list都出来了,不是它还能是谁呢?可是,定睛一看,这个内容里面的url格式不大对,一看就像是加密事后的,怪不得搜不到呢

下面就是想办法找到解密方法,来验证一下,这里看到的是否是咱们想要的视频地址了

先捋一下思路,咱们找到的这些数据是浏览器请求回来的,既然请求这些数据,确定会有用到的地方,下面咱们就来找一下这些数据在哪里被使用了,怎么找呢,仍是搜索,拿这些数据中的变量名来搜

这些数据中可疑变量有两个:backup_url_一、main_url,第一个一看就是备用的,因此咱们拿第二个搜吧

搜索结果如图:

下面在这些包中定位main_url所在的代码,很幸运,第一个就是咱们想要的(tt-video.js)

如图:

 

从代码中咱们能够看到,main_url使用了base64decode来进行解密,下面使用代码验证(这个请自行验证)一下,果真获得了咱们想要的视频地址

此时,咱们已经有了从这个包中获取视频地址的方法了,那么下个问题是,这个包的地址是如何生成的?

首先分析一下这个包的url的组成:

https://ib.365yg.com/video/urls/v/1/toutiao/mp4/v02004bd0000bc9po7aj2boojm5cta5g?r=048136401358795045&s=3128215333&aid=1190&callback=axiosJsonpCallback1&_=1540123000124

首先去掉可有可无的参数,方法很简单,直接在浏览器中打开这个url,而后尝试删减参数,不断测试就能够了,删减后的url以下

https://ib.365yg.com/video/urls/v/1/toutiao/mp4/v02004bd0000bc9po7aj2boojm5cta5g?r=048136401358795045&s=3128215333

 而后发现,其中有三个东西不知道哪里来的,下面继续使用咱们的搜索工具来寻找,一个一个来。

注意:跟随文章一步一步走的时候可能看到的参数和我这里写的参数不同,请按照实际的来搜索

先是 v02004bd0000bc9po7aj2boojm5cta5g,搜索结果以下:

原来这个参数是视频的videoId,直接在网页源码中,好,第一个搞定

下面看第二个参数 048136401358795045  搜不到

下面看第三个参数 3128215333  搜不到

后面两个参数都搜不到,多是实时生成的或者加密了,因此换个思路,用 url的前半部分的关键词去搜 https://ib.365yg.com/video/urls/v/1/toutiao/mp4, 看那里用到了这个

关于关键词 固然是越长越准确,因此我选取的搜索词是 video/urls/v/1/toutiao/mp4 搜索结果以下:

 

这里只能一个一个点开看源码了。。。

看源码的时候注意点有如下几个:

一、查看上下文,看所在函数做用 所在文件做用

二、思考咱们搜索的东西是什么,好比本例中搜索的是一个视频资源的url,那么确定要特别关注和视频相关的关键词,函数名之类的东西

哈哈,幸运的是,在第一个文件(tt-video.js)中我就找到了很可疑的代码

 

 这里面全是video相关的,更可疑的是这个 getVideosJson函数名,而后我发现有个crc32函数用到了目标url,那下面就看一下crc32函数在哪里定义的

(PS:标准crc32是一个公开算法,用于生成一段数据的校验码,不过通常这些反爬虫的前端工程师们都会本身实现一下,因此仍是以JS代码为准)

经过搜索crc32关键词,能够定位到以下代码:

 

重点看图中的标红区域,苦寻不见的 r 和 s 参数在这里出现了,这说明咱们的思路应该是正确的,而后发现r的值是随机生成的,这个好办,咱们待会也随机生成一个就行,最好彻底按照JS代码来模拟。

可是 s 的值好像略微复杂一下,嗯,下面就是考验你脑力的时刻了。

s的值是由函数o生成的,可是o的代码很复杂,这个怎么办呢?

第一种办法:

硬上呗,把JS代码的算法彻底模拟了,使用别的语言尝试计算,或者使用js引擎好比pyv8, nodejs等来执行均可以

第二种办法:

怎么说呢,换位思考一下,若是你是写这段代码的前端工程师,你会怎么作,难道你会去从零开始实现一个校验算法???(固然不能否认,确实有某些状况下,算法是自创的)既然这个函数是

crc32这样的公开算法,每种语言基本都有实现的标准库,因此直接调用标准库测试一下就能够了,若是加密结果一致,皆大欢喜,不一致,请参考第一种方法。

 

ok,到目前为止,分析已经完成了,下面就是写代码的时刻了。代码以下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

代码在哪里?

你难道还真想要代码?本身动手,丰衣足食!!

相关文章
相关标签/搜索