PyExecJS模块
1.介绍
PyExecJS
是一个实现通过python执行js代码的库。虽然这个项目在2019年3月19终止,不再更新和维护,但是用来写爬虫执行js脚本是非常方便的。它最后一个版本是1.5.1。
注意:通过python执行js脚本主要是python进行调用PyExecJS自带的运行环境来实现js脚本的执行。
2.支持的运行环境
一级支持(提供运行类且经过测试)
PyV8
- 一个Googel V8 引擎的python封装库(现在只有python2的,无python3的)Nashorn - 是一个基于JVM的轻量级高性能的JavaScript运行环境)
二级支持(提供运行类但没有测试)
Apple JavaScriptCore - Included with Mac OS X
Microsoft Windows Script Host (JScript)
SlimerJS - 一个可编写脚本的浏览器类似PhantomJS
Mozilla SpiderMonkey - 是一个用C语言实现的JavaScript脚本引擎
3.安装
$ pip install PyExecJS
或者
$ easy_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
4.注意细节
如果环境变量``EXECJS_RUNTIME被指定,
PyExecJs会把它当做默认的
JavaScript`运行环境:
>>> execjs.get().name # this value is depends on your environment.
>>> os.environ["EXECJS_RUNTIME"] = "Node"
>>> execjs.get().name
'Node.js (V8)'
也可以手动指定
>>> import execjs.runtime_names
>>> jscript = execjs.get(execjs.runtime_names.JScript)
>>> jscript.eval("1 + 2")
3
>>> import execjs.runtime_names
>>> node = execjs.get(execjs.runtime_names.Node)
>>> node.eval("1 + 2")
PyExecJS
的优点是不需要关心JavaScript
环境。特别是,它可以在Windows环境下工作,而不需要安装额外的库。
PyExecJS的一个缺点是性能。PyExecJS
通过文本与JavaScript运行时通信,速度很慢。另一个缺点是它不完全支持运行时特定的特性。对于某些用例,PyV8
可能是更好的选择。但是PyV8
不支持python3。