听说你在玩 Python 爬虫遇到 JavaScript 的时候还在使用 selenium ?

289 阅读3分钟
原文链接: zhuanlan.zhihu.com

我们在玩爬虫的时候对于一些没做什么反爬的网站来说

使用简单的库三两下就能把数据爬取下来了





不过

对于一些别人认为比较重要的数据来说

可就没有那么容易了

他们认为这些数据很重要但是又不得不展示给客户

所以只能想尽办法


比如:

对方是如何丧心病狂的通过 css 加密让你爬不到数据的


python爬虫反反爬 | 像有道词典这样的 JS 混淆加密应该怎么破





有人说对于这些前端所搞的事情

用 selenium 或者 Puppeteer 不就得了

它们确实很强大

不过终究还是需要浏览器配合

比起直接通过请求数据获取

速度和性能都没那么好





有人开玩笑说我 TM 本来是搞爬虫的怎么搞着搞着变成搞前端了






对于一些简单的网站

直接用 python 几行代码就轻松搞定了


而对于一些用 JS 混淆的网站就需要去分析了

简单点的 JS 加密函数可以使用 Python 模拟相关的函数



比如我们玩过的那个有道词典的

就是模拟 hash 的加密函数


那么对于一些比较复杂的 JS 混淆可就没那么简单了

一般情况下没那么容易通过 Python 去模拟





那有什么方法呢?接下来就是学习python的正确姿势




既然我们无法简单的使用 Python 去模拟 JS 操作

那么有没有可能

把那些难以理解的 JS 代码

直接给拉下来

然后使用 Python 去运行它们呢?


也就是说使用 Python 运行那些难以理解的 JS 代码然后得到我们要的结果



答案是有的

Python 有这样的库

使用它们就可以来执行 JS 代码






今天就给你介绍几个这样的库


通过它们你就可以把你分析到的关键 JS 代码然后扔给它们,一顿执行拿到你要的结果



js2py



这个库很轻量是基于 ECMAScript 实现的来具体感受一下它的用处吧



安装


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 了


import PyV8ctxt = PyV8.JSContext() #获取对象ctxt.enter() #调用js前需要调用这个函数result = ctxt.eval(js) #执行JSctxt.leave() #执行完毕






PyExecJS


这个库需要运行在一定 js 环境下才能使用比如我们刚刚说的 Google 的 V8比如 node.js


虽然这个库作者不再维护不过还是可以使用的

使用 pip 即可安装

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




ok以上就是使用 Python 运行 JS 的主要内容希望对你有帮助

那么我们下回再见

peace


也许你还想看:

1、给你们说几点鲜有人知的爬虫技巧2、教你装逼了:怎么样发布你的 Python 代码给别人 “pip install”

ps:如果你也想要享受帅b提供的非公开私密内容的话,可以来了解一下:帅气的VIP