目录

爬取目标

网址:

工具使用

开发工具:pycharm

开发环境:python3.7, windows10

使用工具包:requests,aes,json

涉及aes对称加密问题 需要 安装node.js环境

使用npm install 安装 crypto-js​

项目思路解析

确定数据 在这个网页可以看到数据是动态返回的 但是 都是加密的 如何确定是我们需要的?

突然想到 如果我分页 是不是会直接加载第二个页面 然后查看相似度 找到第一个页面, 我真是太聪明了

数据找到了 现在开始寻找加密 但是突然发现没有 加密的关键字? 那我们通过url 下手试试 在all里面全局 搜索 query/comp/list(url后面的参数)

找到这个接口 鼠标右键 可以在源代码查看他

慢慢调试 中间调试太多了 我就不一一截图出来了 跑到这里 发现data 里面的参数 和我们看到的加密一致

h(t.data) 加密位置

进去h里面 (鼠标光标放到 h上面 会显示他的 js地址 如果没有显示 就是证明你还没有执行到这里 需要在前面打上断点 刷新页面调试)

发现这个采用aes加密算法 使用模型cbc模式 采用填充方式为 pkcs7

aes.decrypt() # 参数说明 秘钥 模式 偏移值

f  = ‘jo8j9wgw%6hbxffn’ # 秘钥

m = ‘0123456789abcdef’ # 偏移值

证明数据推导正确 在 return r.tostring() 打上断点

r里面数据正常返回

简易源码分享

import requests
from crypto.cipher import aes
import json​
url = 'http://jzsc.mohurd.gov.cn/api/webapi/dataservice/query/comp/list?pg=2&pgsz=15&total=0'
headers = {
    'user-agent': 'mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/93.0.4577.63 safari/537.36 edg/93.0.961.38'
}
response = requests.get(url, headers=headers).text
f = 'jo8j9wgw%6hbxffn'  # 秘钥
m = '0123456789abcdef'  # 偏移值
​# 转码  utf-8?  字节 16进制
m = bytes(m, encoding='utf-8')
f = bytes(f, encoding='utf-8')
​# 创建一个aes算法 秘钥  模式 偏移值
cipher = aes.new(f, aes.mode_cbc, m)
# 解密
decrypt_content = cipher.decrypt(bytes.fromhex(response))
result = str(decrypt_content, encoding='utf-8')
​# okcs7 填充
length = len(result) # 字符串长度
unpadding = ord(result[length - 1]) # 得到最后一个字符串的ascii
result = result[0:length - unpadding]
result = json.loads(result)['data']['list'] # dupms json.dumps()  dict  格式 json的
# {"键":"值"}
​for i in result:
    print(i)

以上就是python爬虫实战js逆向aes逆向加密爬取的详细内容,更多关于python爬取js逆向aes逆向加密的资料请关注www.887551.com其它相关文章!