爬虫肆无忌惮的好日子一去不复返了,各个公司如今都有了防范意识。采用cookie池,更换user-agent,更换代理,采用打码平台破解验证码,自动化采集等爬取,已经是比较low的方式了,高级一点的有逆向解析js和反编译app破解加密sign等。
逆向解析以网页版美拍无水印视频爬取为例子:
爬取美拍热门视频:https://www.meipai.com/medias/hot
1.找到接口:https://www.meipai.com/home/hot_timeline?page=1&count=12
发现是get请求,直接在浏览器访问就获取到标题,视频播放地址,点赞,转发,作者,发布时间等信息。

问题

在获取视频下载地址的时候,发现video是一串字符串,尝试后发现,各种办法都无法解析,而且也无法获取到视频下载地址。

思路

在element页面发现了data-video与视频的直接播放地址,但是element页面数据无法直接获取到。
videos:f7b0aHpgn0opgVUR0cDovL212dmlkZW8xMS5tZWl0dWRhdGEuY29tLzVjMGY4Zjg4YzMyYmUybWc5b29nZ3A5MDg1X0gyNjRfMV81ODZjMWNlNWY2YmE3MS5tcDQ/az1hYjg2MWQ4NDJhYjM2OTRkN2JhYmE4NzczODYxMzA5YSZ0PTVjMTYzq4CM2I3
真实视频地址:http://mvvideo11.meitudata.com/5c0f8f88c32be2mg9ooggp9085_H264_1_586c1ce5f6ba71.mp4?k=ab861d842ab3694d7baba8773861309a&t=5c1633b7

通过search全局搜索data-video与src当中的部分字符串,搜索.mp4,也发现都没有任何结果,一时间束手无策。
尝试全局搜索mp4,细心找到了某个js当中有src:k.decodeMp4.decode(a.vcastr_file),敏感到它就是要找的。

破解

k.decodeMp4.decode(a.vcastr_file),找到对应的js实现,搜索decodeMp4,在6090行发现了这个方法,耐心对这一段js代码进行解析,将js语法转为熟悉的python。

转完之后的代码为:

def getHex(a):hex = a[:4][::-1]str1= a[4:]return str1, hexdef getDec(a):b = str(int(a, 16))c = list(b[:2])d = list(b[2:])return c, ddef substr(a,b):k = int(b[0])c = a[:k]d = a[k:k+int(b[1])]temp = a[int(b[0]):].replace(d, "")res = c+ tempreturn resdef getPos(a,b):b[0] = len(a) -int(b[0]) - int(b[1])return b#这里的a字符串就是前面的videos
a = "f7b0aHpgn0opgVUR0cDovL212dmlkZW8xMS5tZWl0dWRhdGEuY29tLzVjMGY4Zjg4YzMyYmUybWc5b29nZ3A5MDg1X0gyNjRfMV81ODZjMWNlNWY2YmE3MS5tcDQ/az1hYjg2MWQ4NDJhYjM2OTRkN2JhYmE4NzczODYxMzA5YSZ0PTVjMTYzq4CM2I3"
str1, hex= getHex(a)
pre,tail = getDec(hex)
d = substr(str1, pre)
zz = substr(d, getPos(d, tail))

zz就是return g.atob(this[k](d, this.getPos(d, c.tail)))当中的this[k](d, this.getPos(d, c.tail)),将它传给了g.atob()当作参数,因此继续进行断点调试。会进入下面的方法,最后return h,这一段也是重要的参数生成部分,嫌弃麻烦,直接用exexjs调用js(用js2py等工具也都是可以的)

python中执行js代码,print(jsContent1.call(“s”,kk))这个打印的结果就是我们需要的src:http://mvvideo11.meitudata.com/5c0f8f88c32be2mg9ooggp9085_H264_1_586c1ce5f6ba71.mp4?k=ab861d842ab3694d7baba8773861309a&t=5c1633b7 ,无水印的视频地址

import execjs
js = """
var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function s(a) {if (a = a.replace(/=+$/, ""),a.length % 4 == 1)throw f;for (var b, c, d = 0, g = 0, h = ""; c = a.charAt(g++); ~c && (b = d % 4 ? 64 * b + c : c,d++ % 4) ? h += String.fromCharCode(255 & b >> (-2 * d & 6)) : 0)c = e.indexOf(c);return h}"""
jsContent1 = execjs.compile(js)
print(jsContent1.call("s",zz))

后来同事发现,对zz进行base64解码就是我们需要的url了。

import base64
print(base64.b64decode(zz).decode())

最终的代码与结果就不展示了,感兴趣的自己研究一下。

总结

1.对url当中的关键字符串,包括mp3,mp4,进行全局搜索定位,经常是我们的突破口;
2.对浏览器进行断点调试,这个可以到网上找找代码,熟悉一下过程;
3.对js不熟悉,依然要硬着头皮上,耐心解析(使用浏览器的console熟悉js方法),简化js或转化为python代码,边调试边验证;
逆向解析是爬虫的难点,破解需要靠积累,熟悉常见的加密后的样式,如果你有类似的破解心得,欢迎留言交流。

美拍爬虫逆向js解析实战相关推荐

  1. 爬虫之JS解析,Python模拟JS代码运行。(附带模拟人人网登录案例)

    六.JS解析 1.定位js文件 1.通过initiator定位到js文件 2.通过search搜索关键字定位到js文件 3.通过元素绑定的事件监听函数找到js文件,Event Listeners 注: ...

  2. 爬虫逆向 js逆向常用工具简单介绍

    古语有云:工欲善其事,必先利其器. 作为逆向的开始,这个自然是无法避免的,毕竟js逆向的环境是浏览器,而浏览器自然为开发做了很多工具,方便再开发的时候检测开发过程中是否有问题,就像开发过程中debug ...

  3. Python 爬虫逆向破解案例实战 (三):凡科网逆向之闭包技巧

    目录 1. 凡科网逆向分析 2. 代码实现 3. 总结 1. 凡科网逆向分析 点击 此处 进入到 凡科网 的主页面,在键盘中按下 <Fl2> 快捷键或者是鼠标右键单击选择 检查(inspe ...

  4. Python爬虫之bs4解析实战篇_爬取星巴克菜单【Python爬虫】

    完整源码: import urllib.request from bs4 import BeautifulSoupdef get_content():url = 'https://www.starbu ...

  5. 逆向js实例---美拍

    做爬虫,一般分两个大方向,一个是抓网页,一个是抓app.比如同一个数据,你去分别抓两者(假设都存在的话)他们两者有相似相同的部分,也有区别,比如同样能拿到数据,难易程度却不同,或者是在app抓包中发现 ...

  6. Python爬虫之Js逆向案例(2)-某乎搜索

    Python爬虫之Js逆向案例(2)-知乎搜索 声明:某乎加密逆向分析仅用于研究和学习 大家好,今天继续分享关于某乎关键词搜索接口为案例的Js逆向实战.如果你是一名新手,而且还没有来得及看上一篇< ...

  7. 做爬虫,JS 逆向了解一下

    爬虫是大数据时代不可或缺的数据获取手段,它是综合技术的应用体现. 有取就有失,有攻就有防. 开发者为了保护数据,不得已想出了很多办法来限制爬虫对数据的获取. WEB 网站的构成使得 JavaScrip ...

  8. 《爬虫逆向进阶实战》书籍介绍

    <爬虫逆向进阶实战>书籍介绍 内容简介 <爬虫逆向进阶实战>以爬虫逆向方向的相关技术和岗位要求进行撰写,结合作者多年工作经验,总结了爬虫的架构体系.主流框架.技术体系和未来发展 ...

  9. 【爬虫逆向案例】某道翻译js逆向—— sign解密

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! [爬虫逆向案例]某道翻译js逆向-- sign解密 1.前言 2.步骤 3.源码 4.号外 1.前言 相信各位小伙 ...

最新文章

  1. YOLO窥见黑夜|YOLO in the Dark让黑夜里的目标检测成为可能
  2. #20145238荆玉茗《网络对抗》-逆向及Bof进阶实践
  3. 被远程机器长时间无响应 (错误码:[308])_自动折叠式“Rollbot”为完全不受束缚的软机器人铺平了道路...
  4. 推荐一个国外SaaS产品-Olark
  5. [html] 你知道短链接的生成原理吗?
  6. [html] 写H5和小程序有什么相同及不同的地方吗?
  7. Bjarne Stroustrup语录[C++经验]
  8. 计算机内存断点,计算机 | 码农们都需要知道的「中断」相关知识
  9. android-ndk-aide,NDK安装教程20180605
  10. linux(ubuntu)下C++访问mysql数据库
  11. 汽车软件开发流程及代码提交
  12. 微信小程序图片上传以及剪切(image-cropper的简单使用)
  13. 微信小程序父子组件之间传值
  14. 运动目标检测 光流法
  15. 上海市政府颁布智能汽车牌照,蔚来汽车成首批获此资格企业
  16. 留个底 人人乐旁靓房房东出租,我是房东
  17. 【excel】如何绘制斜线表头
  18. Task运行过程分析2
  19. d2i_X509 载入der文件返回为空
  20. 笔记本无线连接打印机

热门文章

  1. spotlight安装使用
  2. 关于小程序开发的一些资源
  3. 开发视频直播APP需要了解的技术原理和技术细节
  4. 一道关于老鼠繁衍的算法题
  5. 华为手机怎么变鸿蒙系统,刚公布,未来你的华为手机将迎来这些改变→
  6. Spacy en_core_web_sm
  7. 《JavaWeb篇》01.Mysql看这一篇就够了
  8. 【高项备考】范围管理,过程域、知识点、案例学习
  9. 信息墒与压缩编码基础
  10. HNOI2016 游记