K哥30个站点的逆向爬虫代码|pyexecjs库的基本使用

仓库地址:https://github.com/kgepachong/crawler/

常见问题

JS 代码里引用了三个库,npm install 安装一下即可,如果安装了还提示找不到库,那就是路径问题,推荐在当前目录下执行命令安装,或者在 Python 代码里指定完整路径,具体方法可自行百度。
jsencrypt 这个库,本地运行可能会报错 window is not defined,在 \node_modules\jsencrypt\bin\jsencrypt.js 源码中加入 var window = global; 即可,这是实现 RSA 加密的库,当然还有很多其他实现方法或者库,都可以。
execjs 执行 JS 的时候,可能会报编码错误 “gbk” can’t decode byte…,
有两种解决方法,一是找到官方源码 subprocess.py,搜索 encoding=None 改成 encoding=‘utf-8’,
二是直接在 Python 代码里面加入以下代码即可

pyexecjs库
一、pyexecjs库是什么?
pyexecjs是一个用Python来执行JavaScript代码的工具库,该库支持多种JavaScript运行时环境,如Node.js、PhantomJS、SlimerJS等,允许开发者在Python中无缝地调用和执行JavaScript代码。
二、常见使用场景
在Web爬虫开发或者处理JavaScript加密内容的场景下,pyexecjs尤为有用,例如当网页中的数据是通过JavaScript动态加载或加密时,可以直接在Python程序中执行JavaScript函数来获取或解密这些数据。

二、pyexecjs库怎么用?

# 安装
pip install pyexecjs

(1)execjs必学方法eval

import execjs# 必须掌握的函数之一 eval(expression)
"""
功能:如果你没有特定的JavaScript文件,而是想直接执行给定的JavaScript表达式代码时使用(使用内置运行时)
参数:expression是要执行的JavaScript字符串表达式。
返回值:js执行结果。
"""
e = execjs.eval('a = new Array(1,2,3)')
print(e)

(2)execjs必学方法complie

import execjs# 必须掌握的函数之二 compile()
"""
功能:用于编译JavaScript代码,创建一个可执行的上下文。这个上下文可以用来执行预编译好的JavaScript表达式或函数
参数:source必填参数,类型为字符串,表示要编译的JavaScript代码。
返回值:返回一个execjs.Context对象实例,该实例拥有eval、call等方法,可以用来执行JavaScript代码并获取结果
"""# 可以直接编译一段js片段
js_code1 = """function add(a, b) {return a + b;
}
"""# 可以编译一个js文件
with open('test.js', 'r') as f:js_code2 = f.read()# 编译js代码
ctx1 = execjs.compile(js_code1)
result = ctx1.call("add", 1, 2)
print(result)ctx2 = execjs.compile(js_code2)
result = ctx2.call("add", 1, 2)
print(result)

(3)execjs必学方法call

import execjs# 必须掌握的函数之二 call(function_name, *args, **kwargs)
"""
功能:调用在JavaScript环境中定义的函数,并将Python变量作为参数传入给这个JavaScript函数。
参数:- function_name:字符串类型,表示要调用的JavaScript函数名。- *args:可变位置参数列表,这些参数会被转换并作为对应的JavaScript函数的参数传入。- **kwargs:可变关键字参数字典,这些参数同样会被转换后作为JavaScript函数的命名参数传入。
返回值:返回执行JavaScript函数后的结果。这个结果可以是任何JavaScript数据类型,在Python端通常会被转换为相应的Python类型(例如,JavaScript对象会被转换为Python字典等)。
"""
# js代码片段
js_code = """function add(a, b) {return a + b;
}
"""# 创建并编译js上下文
ctx = execjs.compile(js_code)# 使用call方法来调用js代码中的函数
result = ctx.call('add', 10, 2)
print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF入门_02依赖属性

1、依赖属性主要有以下三个优点 1)依赖属性加入了属性变化通知、限制、验证等功能。这样可以使我们更方便地实现应用,同时大大减少了代码量 2)节约内存:在WinForm中,每个UI控件的属性都赋予了初始值,这样每个相同的控件在内存中都会保存一份初始值。而WPF依赖属性很好地…

uiautomatorviewer安卓9以上正常使用及问题处理

一、安卓9以上使用uiautomatorviewer问题现象 打开Unexpected error while obtaining UI hierarchy 问题详情 Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException 二、问题处理 需要的是替换对应D:\software\android-sdk-windows…

Linux环境下Jmeter执行压测脚本

Linux环境下Jmeter执行压测脚本 前提官网下载Jmeter执行脚本 前提 注意:Jmeter的运行依赖Java环境 官网下载Jmeter 1、下载链接:https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.zip 2、解压 unzip apache-jmeter-5.6.3.zip 执行脚本…

洛谷刷题 P1003 [NOIP2011 提高组] 铺地毯

题目传送:P1003 [NOIP2011 提高组] 铺地毯 思路 该题主要考察模拟思想,可以用二维数组来模拟表示地面,每个坐标点记录其最上层地毯,然后每输入一张地毯数据就对地面相应坐标点进行修改,最后读取目标地点的状态&#…

python将照片集导出成视频

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 背景 一个安静的下午,看着电脑里乱七八糟的照片,有大有小,宽高不一,突然想找个方式把他们统一起来&…

PC企业微信自动回复,群发管理,定时发送,朋友圈

服务提供了丰富的API和SDK,可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互,可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作,通过接口可以实…

滚雪球学Redis[7.0讲]:Redis在Web应用中的会话管理:实现、优化与安全性!

全文目录: ☁️前言⛅️1. 在Web应用中使用Redis管理会话🕧️1.1 什么是会话管理?🕐️1.2 为什么选择Redis来管理会话?🕜️1.3 示例:使用Redis实现会话管理🕑️代码示例&#x1f55d…

Vue前端预览docx文档

Vue前端预览docx文档 实现效果 vue代码 <el-dialog title"预览" :visible.sync"filePreview"><div ref"file"></div></el-dialog>引入依赖文件 官方文档地址 https://www.npmjs.com/package/docx-preview?activeTabre…

MacOS安装BurpSuite

文章目录 一、下载地址二、下载注册机三、安装教程四、启动burpsuit五、免责声明 一、下载地址 https://portswigger-cdn.net/burp/releases/download?productpro&version2024.7.1&typeMacOsx二、下载注册机 https://github.com/NepoloHebo/BurpSuite-BurpLoaderKey…

Java 多线程进阶:常见的锁策略/synchronized原理/CAS(更新中)

一.常见的锁策略 锁:非常广义的话题; synchronized:只是市面上五花八门的锁的其中一种典型的实现,Java内置的推荐使用的锁; (1)乐观锁 && 悲观锁 乐观锁:加锁的时候,假设出现锁冲突的概率不大;接下来围绕加锁要做的工作很少; 悲观锁:加锁的时候,假设出现锁冲突的概…

数据库中存储树状关系的数据

三张表的文字描述 表1&#xff1a;包含字段A1,字段A2,字段A3. 字段A1是主键 表2&#xff1a;包含字段B1&#xff0c;字段B2&#xff0c;字段A1 字段B1是主键&#xff0c;字段A1是其外键。 1个字段A1的值可以匹配多条表2的记录. 表3&#xff1a;包含字段C1&#xff0c;字段C2&am…

下午题数据库设计15分

一、考什么 题目会给场景&#xff0c;和数据库的设计过程&#xff0c;让你补充残缺的E-R图&#xff0c;关系模式&#xff0c;找主键外键。还有1-2分的随机题型。 二、答题技巧 熟练基本知识结合题干 三、例题

【OD】【E卷】【真题】【200分】项目排期(PythonJavaJavaScriptC++C)

题目描述 项目组共有N个开发人员&#xff0c;项目经理接到了M个独立的需求&#xff0c;每个需求的工作量不同&#xff0c;且每个需求只能由一个开发人员独立完成&#xff0c;不能多人合作。假定各个需求直接无任何先后依赖关系&#xff0c;请设计算法帮助项目经理进行工作安排…

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

python图片文件路径排序

解决用sord 排序文件路径乱序问题&#xff1a; image_files 是 图片文件路径列表[pythonProject/video2img/1.jpg,pythonProject/video2img/2.jpg,.......] image_files.sort(keylambda x: int(x.split(/)[-1].split(.)[0]))

颜廷利:东方智慧的现代诠释者

人文公社 2024年10月21日 东方智者颜廷利, 哲学思想论古今, 和善互爱满天下, 无私奉献情意深… 在当代哲学与文化交融的浪潮中,颜廷利以其深邃的东方智慧和对古今思想的独到见解,成为了一位备受瞩目的思想家。他不仅倡导和谐共处、互爱互助的理念,更以自身的行动践行着无私…

Hi3061M——VL53L0X激光测距(IIC)(同样适用于其他MCU)2

目录 前言资源下载移植基本使用IO配置调用测量 总结 前言 昨晚太晚了&#xff0c;草草结束了上一篇&#xff0c;今天更新下半部分。 昨天已经讲了VL53L0X的使用流程&#xff0c;无非就是进行6步的效准初始化&#xff0c;然后配置下模式和时间&#xff0c;开始采样&#xff0c;…

Python-函数self详解

在Python中&#xff0c;self 是一个特殊的关键字&#xff0c;主要用于类&#xff08;class&#xff09;的定义中&#xff0c;表示类的实例&#xff08;instance&#xff09;本身。以下是对 self 的详细解释&#xff1a; 类和实例的概念&#xff1a; 类&#xff08;Class&#…

Yolov10训练的餐盘菜品目标检测软件(包含源码及数据集)

本文摘要 摘要&#xff1a;本文主要使用YOLOV10深度学习框架自训练了一个“餐盘菜品目标检测模型”&#xff0c;基于此模型使用PYQT5实现了一款界面软件用于功能演示。让您可以更好的了解和学习&#xff0c;该软件支持图片、视频以及摄像头进行目标检测&#xff0c;本系统所涉…

【python】OpenCV—Fun Mirrors

文章目录 1、准备工作2、原理介绍3、代码实现4、效果展示5、参考 1、准备工作 pip install vacm2、原理介绍 在OpenCV中&#xff0c;VCAM 库是一个用于简化创建三维曲面、定义虚拟摄像机、设置参数以及进行投影任务的工具。它特别适用于实现如哈哈镜等图像变形效果。 一、VC…