当前位置: 首页 > news >正文

南阳建设网站制作/aso优化软件

南阳建设网站制作,aso优化软件,政府门户网站建设申请,设计公司画册模板1. 前言日常 Web 端爬虫过程中,经常会遇到参数被加密的场景,因此,我们需要分析网页源代码通过调式,一层层剥离出关键的 JS 代码,使用 Python 去执行这段代码,得出参数加密前后的 Python 实现本文将聊聊利用…

ab578137e1898909f3b8ac3aacf2d818.png

451fd006d2b45f35b513c47734052f7a.png

1. 前言
日常 Web 端爬虫过程中,经常会遇到参数被加密的场景,因此,我们需要分析网页源代码
通过调式,一层层剥离出关键的 JS 代码,使用 Python 去执行这段代码,得出参数加密前后的 Python 实现
本文将聊聊利用 Python 调用 JS 的4种方式2. 准备
以一段简单的 JS 脚本为例,将代码写入到文件中
//norm.js
//计算两个数的和
function add(num1, num2) {
return num1 + num2;
}其中,定义了一个方法,计算两个数的和3. 方式一:PyExecJSPyExecJS 是使用最多的一种方式,底层实现方式是:在本地 JS 环境下运行 JS 代码支持的 JS 环境包含:Node.js、PyV8、PhantomJS、Nashorn 等首先,我们需要安装依赖包 PyExecJS//py_exec_js_demo.py
//安装依赖
pip3 install PyExecJS
然后,从 JS 文件中读取源码def js_from_file(file_name):
"""
读取js文件
:return:
"""
with open(file_name, 'r', encoding='UTF-8') as file:
result = file.read()
return result最后,使用 execjs 类的compile()方法编译加载上面的 JS 字符串,返回一个上下文对象import execjs
from js_code import *
# 编译加载js字符串
context1 = execjs.compile(js_from_file('./norm.js'))最后,调用上下文对象的call() 方法执行 JS 方法其中,参数包含:JS 代码被调的方法名、对应方法的传入参数# 调用js代码中的add()方法,参数为2和3
# 方法名:add
# 参数:2和3
result1 = context1.call("add", 2, 3)
print(result1)需要注意的,由于 PyExecJS 运行在本地 JS 环境下,使用之前会启动 JS 环境,最终导致运行速度会偏慢更多功能可以参考:https://github.com/doloopwhile/PyExecJS4. 方式二:js2py
js2py作为一个纯 Python 实现的 JS 解释器,可以完全脱离 JS 环境,直接将 JS 代码转换为 Python 代码
首先,安装依赖库
# 安装依赖库
pip3 install js2py
然后使用 js2py 中的EvalJs()方法生成一个上下文对象
# 使用获取上下js2py生成一个上下文环境
context = js2py.EvalJs()
接着利用上下文对象执行 JS 脚本,转换为 Python 代码
# 执行整段JS代码
context.execute(js_content)
最后,利用上下文调用 JS 中的方法,并制定输入参数即可
# 使用上下文context调用具体的函数
# 函数名:add
# 参数:1,2
result = context.add(1, 2)
print(result)需要注意是,如果 JS 是很长的混淆代码,转换为 Python 的过程可能会报错
更多功能可以参考:https://github.com/PiotrDabkowski/Js2Py5. 方式三:Node.js
实际上是使用 Python 的os.popen执行 node 命令,执行 JS 脚本
首先,确保本地已经安装了 Node.js 环境
修改 JS 脚本,新增一个导出函数 init ,方便内部函数被调用
//计算两个数的和
function add(num1, num2) {
return num1 + num2;
}
//新增一个导出函数(node方式)
module.exports.init = function (arg1, arg2) {
//调用函数,并返回
console.log(add(arg1, arg2));
};
然后,将调用 JS 方法的命令组成一个字符串
# 组成调用js的命令
# node命令:node -e
cmd = 'node -e "require("%s").init(%s,%s)"' % ('./norm', 3, 5)最后,通过 os.popen 执行命令即可
pipeline = os.popen(cmd)
# 读取结果
result = pipeline.read()
print('结果是:', result)6. 方式四:PyV8
PyV8 是 Google 将 Chrome V8 引擎用 Python 封装的依赖库
它不依赖本地 JS 环境,运行速度很快
import PyV8
from js_code import js_from_file
with PyV8.JSContext() as ctx:
ctx.eval(js_from_file('./norm.js'))
# 调用js函数,指定参数
ctx.locals.add(1, 2)但是经过反复测试发现,MAC 和 PC 在 Python3 环境下,使用 PyV8 会报各种奇怪的问题,所以不推荐使用!7. 最后
上面总结了 Python 调用 JS 的 4 种方式
实际爬虫项目中,一般会先使用 node 命令进行一次测试,确保没问题后,再使用前 3 种方式的任意一种进行 Python 改写。

http://www.jmfq.cn/news/4805569.html

相关文章:

  • 网络舆情监测处置制度/惠州seo网站推广
  • 宝鸡网站建设公司/深圳网络营销怎么推广
  • jsp环保主题网站代做/app推广拉新平台
  • 做网站说什么5.0啥意思/网站优化排名提升
  • 中企动力网站模板/商城网站建设
  • 做网站会提供源代码吗/吉林seo关键词
  • 个人动态网站/网站收录怎么弄
  • 有域名了怎么做网站/网络推广优化平台
  • 杭州91网站建设/百度认证
  • 做网站佛山/合肥seo按天收费
  • 哈尔滨哪里做网站好/网页设计实训报告
  • 我司如何自己建设动态网站/百度收录平台
  • 中山 做网站/注册网址在哪里注册
  • 免费网站怎么制作/如何免费自己创建网站
  • 国家企业信用信息公示系统查询网/什么是搜索引擎优化的核心
  • 包装设计的目的和意义/seo研究协会
  • 中国空间站结构示意图/网站推广的主要方法
  • 广西玉林网站建设/seo技术平台
  • 汕头建网站/百度文库网页版
  • 南桥做网站/口碑营销的方法
  • 美食网站怎样做锅包肉/seo的主要工作是什么
  • ajax做购物网站/推广app平台
  • 网站免费建站o/友情链接交换
  • 美团网站建设规划书/网络营销seo优化
  • 怎么改网站上的logo/今日国际新闻最新消息事件
  • 做一个动态网站多少钱/百度搜索推广怎么做
  • wordpress网站日志/西安网络公司
  • 深圳物流公司大全排名/淘宝seo是什么意思
  • l凉州区城乡建设部网站首页/网络推广软文
  • 临安市建设局门户网站/seo网络贸易网站推广