本文说明:B站学习笔记整理,仅供学习参考~~
网站:https://wx.qmpsee.com/articleDetail?id=feef62bfdac45a94b9cd89aed5c235be
1. 页面分析及解密
第一步:在网络标签也,无法搜索到页面内容,可能导致原因:
- 页面没有加载
- 静态页面,字体加密,这时候会涉及HTML源代码有实体编码
- 数据加密,动态加密。加密形式:刷新页面:页面不变,新增数据,该情况的数据为后端接口动态数据,静态页面【本网站原因】
第二步:无法确定是什么加密,找一个加密参数进行解密查看解密数据内容。
第三步:在源码中打开对应的js文件,并在涉及加密参数encrypt_data
的地方打上断点,重新刷新页面,找到加密参数赋予的变量e
。
第四步:将涉及到的函数复制到本地的js文件中。运行之后,根据参数缺什么补充什么。
箭头放在想查找的函数的地方会出现提示,点击之后直接跳转到对应函数的声明,复制之后进行粘贴。
补充之后的完整代码如下所示:
运行结果,即为我们所想要的数据。
2. py文件调用
- 找到对应的请求连接进行请求传参
- 读取js文件,传参运行。
import execjs
import requests
url = 'https://wyiosapi.qmpsee.com/Web/getCaDetail'
data = {
'page': 1,
'num': 20,
'ca_uuid':'feef62bfdac45a94b9cd89aed5c235be'
}
r = requests.post(url, data)
encrypt_data = r.json()['encrypt_data']
with open('qimingpian.js', 'r', encoding='utf-8') as f:
js_code = f.read()
# 手动指定 Node.js 可执行文件的路径
context = execjs.get(execjs.runtime_names.Node)
context = execjs.compile(js_code)
result = context.call('Mc',encrypt_data)
print(result)
此时会报错
问题解决:解决execjs库运行时gbk编码的问题
https://blog.youkuaiyun.com/qq_21555569/article/details/131343383
解决办法:将下列代码添加到import execjs
引用之前即可
class MySubprocessPopen(subprocess.Popen):
def __init__(self, *args, **kwargs):
kwargs['encoding'] = "UTF-8"
super().__init__(*args, **kwargs)
subprocess.Popen = MySubprocessPopen
os.environ["EXECJS_RUNTIME"] = "Node"
查看返回的result的类型为dict,所以可以直接进行解析好数据提取。
print(type(result))
data = result
dataList = data['list']
for i in dataList:
print(i)