已年久失修,不建议用,可以看看js2py
python 爬虫调用 js 的库之 execjs
针对现在大部分的网站都是使用 js 加密,js 加载的,并不能直接抓取出来,这时候就不得不使用一些三方类库来执行 js 语句
安装
pip install PyExecJS
- 运行环境时
execjs 会自动使用当前电脑上的运行环境再次安装 node.js
node.js 下载官网:http://nodejs.cn/download/
建议下载 xxx.msi,他会再安装时自动配置环境变量
linux 环境可以用 apt-get install nodejs 命令进行安装
使用execjs 解析抓取的网页数据时,报错:Could not find an available JavaScript runtime
JavaScript runtime
Javascript环境有如:Node, JScript, ......
解决方案:
下载:wget https://nodejs.org/dist/v8.11.4/node-v8.11.4.tar.gz
安装Node:./configure --prefix=/usr/local/node; make install
通过错误定位到文件site-packages/execjs/_runtimes.py,从中可以看到取JavaScript Runtime是这个“EXECJS_RUNTIME”环境变量读取
设置环境变量:export EXECJS_RUNTIME=/usr/local/node
3.环境检测
node -v 显示安装的 nodejs 版本
npm -v 显示安装的 npm 版本
4.基本使用
import execjs
inp=input('需要加密的内容')
#读取js文件的内容
with open('weixin.js', 'r', encoding='utf-8') as f:
js_code = f.read()
#通过execjs.compile()进行编译js文件内容
compile_result=execjs.compile(js_code)
# 调用js文件传参
#weixin是js中的function方法名,inp是穿的参
result = compile_result.call('weixin', inp)
print(result)