对于一些没作什么反爬的网站来讲
使用简单的库三两下就能把数据爬取下来了
不过
对于一些别人认为比较重要的数据来讲
可就没有那么容易了
他们认为这些数据很重要可是又不得不展现给客户
因此只能想尽办法
好比:
对方是如何丧心病狂的经过 css 加密让你爬不到数据的
python爬虫反反爬 | 像有道词典这样的 JS 混淆加密应该怎么破
有人说对于这些前端所搞的事情
用 selenium 或者 Puppeteer 不就得了
它们确实很强大
不过终究仍是须要浏览器配合
比起直接经过请求数据获取
速度和性能都没那么好
有人开玩笑说我 TM 原本是搞爬虫的怎么搞着搞着变成搞前端了
对于一些简单的网站
直接用 python 几行代码就轻松搞定了
而对于一些用 JS 混淆的网站就须要去分析了
简单点的 JS 加密函数可使用 Python 模拟相关的函数
好比咱们玩过的那个有道词典的
就是模拟 hash 的加密函数
那么对于一些比较复杂的 JS 混淆可就没那么简单了
通常状况下没那么容易经过 Python 去模拟
那有什么方法呢?接下来就是学习python的正确姿式
css
既然咱们没法简单的使用 Python 去模拟 JS 操做
那么有没有可能
把那些难以理解的 JS 代码
直接给拉下来
而后使用 Python 去运行它们呢?
也就是说使用 Python 运行那些难以理解的 JS 代码而后获得咱们要的结果
答案是有的
Python 有这样的库
使用它们就能够来执行 JS 代码
前端
今天就给你介绍几个这样的库
经过它们你就能够把你分析到的关键 JS 代码而后扔给它们,一顿执行拿到你要的结果
node
js2py
这个库很轻量是基于 ECMAScript 实现的来具体感觉一下它的用处吧
安装
python
pip install js2py
而后就可使用
js2py.eval_js()
来执行 js 的语句了
好比
除了这样以外
还能够直接在 JS 代码里面执行 Python 代码
好比咱们能够在 JS 使用 python 的 requests 库
来请求咱们的 vip 网站
而且让它返回响应状态码
能够看到在这里返回了 200说明可用
很 nice 啊
此外还能够将 js 文件转化为 python
PyV8
PyV8 是 Google 家的V8是 Google 开源的 JS 引擎
根据你的系统在如下连接下载 V8
https://github.com/emmetio/pyv8-binaries
将文件解压下来
放进你 python 环境下的 site-packages 中
将 .so 后缀的文件改为 _PyV8.so
若是你不知道你的 site-packages 在哪里
能够这样查询
而后你就能够愉快的使用 PyV8 了
git
import PyV8ctxt = PyV8.JSContext() #获取对象ctxt.enter() #调用js前须要调用这个函数result = ctxt.eval(js) #执行JSctxt.leave() #执行完毕
这个库须要运行在必定 js 环境下才能使用好比咱们刚刚说的 Google 的 V8好比 node.js
虽然这个库做者再也不维护不过仍是可使用的
使用 pip 便可安装
github
pip install PyExecJS
使用例子是这样的
浏览器
>>> import execjs>>> execjs.eval("'red yellow blue'.split(' ')")['red', 'yellow', 'blue']>>> ctx = execjs.compile("""... function add(x, y) {... return x + y;... }... """)>>> ctx.call("add", 1, 2)3