大家会遇到网页请求数据是经过 JS 处理的,特别是模拟登录时可能有加密请求。而目前绝大部分前端 JS 代码都是经过混淆的,可读性极低,想理解代码逻辑需要花费大量时间。因此不要着急使用 Selenium 暴力解决,毕竟 Selenium 严重拖慢爬虫效率,我们可以尝试使用一些第三方库,来直接执行前端 JS 代码得到处理过后的结果
PyExecJS
这个库主要是将 JS 代码运行在本地的 JS 环境中,优点是我们有多种 JS 环境的选择,官方推荐了 PyV8、Node.js、PhantomJS、Nashorn 四种,当然缺点是必须安装一种环境导致不是很轻量,而且调用时有一个启动环境过程,还是有明显缓慢的。
一、Node.js安装配置
(1) JS 环境,推荐安装Node.js ,Node.js官方网站,安装方便,最新版也整合了V8引擎
(2)安装后,将Node.js
添加路径到系统环境变量
(3)在cmd输入node -v
,如下图,即配置环境变量成功。
二、Pycharm配置
(1) 在Settings | Plugins
里边,搜索NodeJS
,然后点击下载;
(2) 在Settings | Languages & Frameworks| Node.js and NPM
,查看配置当前安装的node.js的路径。
三、PyExecJS安装
pip install PyExecJS
四、Pycharm运行Js代码
(1) js文件
(2)调用js文件中的函数
code:
import execjs
def my(setence):
#读取js文件
with open('show.js','r',encoding='utf-8') as f:
reader=f.read()
#加载编译读取内容
loader=execjs.compile(reader)
#调用js文件中的方法
r =loader.call('say',setence)
#返回结果
return r
if __name__ == '__main__':
#调用方法
print(my('What can you do any Kung Fu,John?'))
(3)运行效果