简单的用Python实现一下JS逆向解密,采集空气质量数据
最近天气降温厉害,咱们用Python
来分析一下空气质量如何~
话不多说,我们直接开始上手。
环境使用
- Python 3.8
- Pycharm
- nodejs
模块使用
- import requests
- import execjs
- import json
requests
和execjs
都是第三方模块,需要手动安装,直接pip install 加上模块名字即可。
-
明确需求:
明确采集的网站以及数据
- 网站: 目标网址
- 数据:
空气质量相关数据
-
抓包分析:
通过浏览器自带的开发者工具分析数据
- 打开开发者工具: F12
- 刷新网页
- 通过关键字搜索查询对应数据包位置
- 发送请求 -> 模拟浏览器对于url地址发送请求
- 获取数据 -> 获取服务器返回响应数据
- 解析数据 -> 提取具体数据内容
- 保存数据 -> 保存表格文件中
定义月份列表,用于循环请求数据。
month_list = ['202301', '202302', '202303', '202304','202305','202306','202308','202309','202310']
循环请求每个月份的数据
for month in month_list:
发送请求
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } # 请求链接 # 完整的源码和视频讲解我都打包好 # 在这个抠裙自取 708525271 url = 'https://www.aqistudy.cn/historydata/api/historyapi.php'
调用JS代码获取加密参数
# 读取js文件 data_file = open('data.js', 'r', encoding='utf-8').read() # 编译JS代码 data_code = execjs.compile(data_file) # 参数 m0fhOhhGL = "GETDAYDATA" oNLhNQ = { "city": "北京", "month": month } # 调用js代码函数 hA4Nse2cT = data_code.call('post_data', m0fhOhhGL, oNLhNQ) print('加密的请求参数: ', hA4Nse2cT) # 请求参数 data = { 'hA4Nse2cT': hA4Nse2cT } # 发送请求 response = requests.post(url=url, data=data, headers=headers).text
解密响应加密数据
# 读取文件 response_file = open('response.js', 'r', encoding='utf-8').read() # 编译文件 response_code = execjs.compile(response_file) # 调用js函数 result = response_code.call('dxvERkeEvHbS', response) print('加密的响应数据: ',response) print('明文响应数据: ',result)
保存数据
将解密后的数据保存到Excel文件中
json_data = json.loads(result) content_list = [] for index in json_data['result']['data']['items']: content_list.append(index) df_data = pd.DataFrame(content_list) df_data.to_excel(f'{month}.xlsx', index=False)
好了今天的内容就分享到这,下次见~