简介
美拍网页版热门视频:
https://www.meipai.com/medias/hot
下载每一页的视频,但由于视频链接是加密了的,需要 js 逆向解码,才可得到链接。
链接构造
可看到每一页的 url 类似这样,就 page= 字段不同:
https://www.meipai.com/home/hot_timeline?page=3&count=12
page=1:第一页
page=2:第二页
以此类推
视频链接
切换到旁边的 Preview 选项卡,可以看到 json 数据,其中的 vedio 键所对的那一串乱码就是视频链接
我们需要解码,获得原来的链接,然后才能下载
接下来一步一步来看怎么解码
js 逆向
右键查看元素,可以看到 data-video 所对的值是一串乱码,而 src 所对的值是视频播放的的链接
随便点开一个视频,还可以看到 data-vedio 和 src 字段
切换到 Source 选项卡,2 号是这个网站所有的文件,我们就需要在 3 里面搜索找到可疑的解码的 js 代码;
搜索的是关键词,关键词是不确定的,要想到和要解码的数据有关,比如说 vedio:xxxx,xxxx是要解码的数据,那可以先尝试搜索 vedio 看能不能搜索得到相应的代码,不能的话可以试试 decode,encode,因为和解码编码有关;
在这个问题中,我们视频链接是 .mp4,试着在 2 从上往下一个一个 js 文件的搜索 mp4,下图搜索到了但看代码不太像
继续找下一个 js 文件,在一个 js 文件中找到了一个带有关键字 decodeMp4 的字段,这个函数可能就是解码的函数了,两个绿色断点中间的部分
在这行代码行数那里打断点,按 F5 刷新,运行到这里会停止,网页呈灰色状态,然后看看这个 decodeMp4 函数里,有没有调用了其他函数,这里发现了一个 atob 函数,把鼠标悬停在上面可以看到调用的地方,点击
点击后看到了这个函数,它最后返回了一个值,好了现在解码函数都找到了,需要把他们扣出来结合 Python使用
扣代码
在这个decodeMp4 函数中可以看到它有 5 个函数1,2,3,4,5
先只把这些函数扣出来,像这样,最好像上面1,2,3,4,5按顺序放,调用的时候就方便清楚一点,大致读代码它们是从上往下调用关系,然后先调试好在用 python 调用
具体的扣的代码,详细看源代码吧,在调试时,如果按原来的扣下来直接运行,总会报一些错:
window。。。:这是 js 在前端显示的语法,删掉
某个变量没定义:可能在扣函数时,原 js 代码中在这个函数前后可能有定义,但我们只扣了函数,没扣变量,也扣下来
this。。。:因为在原 js 代码中是,函数内部调用函数内部,扣出来后要改成调用的函数名
没有了错误后,接下来用 python 调用了,python 执行 js 代码,使用了 execjs 库执行。
.compile:编译打开的 js 字符串
.call():第一个参数为调用 js 的函数名,第二个为此函数的参数
Final
最后扣好了后,写爬虫下载视频,详细见源码,小编只下了 2个 视频作为结果作为参考