在爬虫的开发过程中,经常需要模拟JS。简单的或者通用的也可以用Python模拟或者找相应的第三方库,但是复杂的可能很难实现。下面这篇文章主要介绍Python使用execjs执行带中文参数的JavaScript的相关信息。有需要的可以参考一下。
抓取了一段包含数据的JavaScript代码:
进口re
导入请求
标题={
用户代理':' Mozilla/5.0(Windows NT 10.0;WOW64) AppleWebKit/537.36 (KHTML,像壁虎一样)Chrome/86 . 0 . 4240 . 198 Safari/537.36 ',
accept': 'text/html,application/xhtml xml,application/xml。q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,应用/签约-交换;v=b3q=0.9 ',
}
res=requests.get(
https://www . kuaikanmanhua . com/web/comic/100868/',
标题=标题
)
script=re.findall(
脚本窗口。__nuxt__=([^]);/script ',res.text)[0]。替换(' \\u002F ','/')
脚本
结果:
这段代码可以直接在浏览器中执行得到相应的JSON数据,那么我们如何用python执行这段代码得到JS数据呢?答案是用execjs。
安装:
pip安装PyExecJS
但是如果此时在安装了Nodejs的windows上直接执行代码:
导入execjs
execjs.eval(脚本)
将报告以下错误:
UnicodeDecodeError错误:“gbk”编解码器无法解码位置447处的字节0xa4:非法的多字节序列
此时,我们需要将execjs的环境重新指定为JScript:
导入操作系统
OS . environ[' exec js _ RUNTIME ']=' JScript '
再一次可以得到一个顺利的结果。
如果我们真的需要使用本地nodejs环境来执行JavaScript,我们需要修改execjs的源代码:
导入操作系统
OS . environ[' exec js _ RUNTIME ']=' Node '
print(execjs.get()。姓名)
Node.js
在execjs安装目录中找到_external_runtime.py文件:
重启程序并再次执行以获得结果:
execjs的调用函数或读取变量示例:
导入execjs
ctx=execjs.compile(' ')
函数add(x,y) {
返回x y;
}
v=add(3,4);
''')
print(ctx.call('add ',1,2),ctx.eval('v '))
3 7
文件lib \ site-packages \ execjs \ runtime _ names . py可以看到exec js支持的JavaScript环境:
PyV8='PyV8 '
Node='Node '
JavaScriptCore='JavaScriptCore '
蜘蛛猴='蜘蛛猴'
JScript='JScript '
幻影='幻影'
苗条的人
纳斯霍恩
总结
关于Python使用execjs执行带中文参数的JavaScript的这篇文章到此为止。关于execjs用中文参数执行JavaScript的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。