翼度科技»论坛 编程开发 python 查看内容

简单的用Python实现一下JS逆向解密,采集空气质量数据

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
最近天气降温厉害,咱们用Python来分析一下空气质量如何~
话不多说,我们直接开始上手。
环境以及模块

环境使用

  • Python 3.8
  • Pycharm
  • nodejs
模块使用

  • import requests
  • import execjs
  • import json
requests和execjs 都是第三方模块,需要手动安装,直接pip install 加上模块名字即可。
思路流程

一. 数据来源分析


  • 明确需求: 明确采集的网站以及数据

  • 抓包分析: 通过浏览器自带的开发者工具分析数据

    • 打开开发者工具: F12
    • 刷新网页
    • 通过关键字搜索查询对应数据包位置

二. 代码实现步骤


  • 发送请求 -> 模拟浏览器对于url地址发送请求
  • 获取数据 -> 获取服务器返回响应数据
  • 解析数据 -> 提取具体数据内容
  • 保存数据 -> 保存表格文件中
代码展示

定义月份列表,用于循环请求数据。
  1. month_list = ['202301', '202302', '202303', '202304','202305','202306','202308','202309','202310']
复制代码
 
循环请求每个月份的数据
  1. for month in month_list:  
复制代码
 
发送请求
  1. headers = {
  2.     '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'
  3. }
  4. # 请求链接
  5. # 完整的源码和视频讲解我都打包好
  6. # 在这个抠裙自取 708525271
  7. url = 'https://www.aqistudy.cn/historydata/api/historyapi.php'
复制代码

 
调用JS代码获取加密参数
  1. # 读取js文件
  2. data_file = open('data.js', 'r', encoding='utf-8').read()
  3. # 编译JS代码
  4. data_code = execjs.compile(data_file)
  5. # 参数
  6. m0fhOhhGL = "GETDAYDATA"
  7. oNLhNQ = {
  8.     "city": "北京",
  9.     "month": month
  10. }
  11. # 调用js代码函数
  12. hA4Nse2cT = data_code.call('post_data', m0fhOhhGL, oNLhNQ)
  13. print('加密的请求参数: ', hA4Nse2cT)
  14. # 请求参数
  15. data = {
  16.     'hA4Nse2cT': hA4Nse2cT
  17. }
  18. # 发送请求
  19. response = requests.post(url=url, data=data, headers=headers).text
复制代码
 
解密响应加密数据
  1. # 读取文件
  2. response_file = open('response.js', 'r', encoding='utf-8').read()
  3. # 编译文件
  4. response_code = execjs.compile(response_file)
  5. # 调用js函数
  6. result = response_code.call('dxvERkeEvHbS', response)
  7. print('加密的响应数据: ',response)
  8. print('明文响应数据: ',result)
复制代码
 
保存数据
将解密后的数据保存到Excel文件中
  1. json_data = json.loads(result)
  2. content_list = []
  3. for index in json_data['result']['data']['items']:
  4.     content_list.append(index)
  5.    
  6. df_data = pd.DataFrame(content_list)
  7. df_data.to_excel(f'{month}.xlsx', index=False)
复制代码
 
 

效果展示

 

 

好了今天的内容就分享到这,下次见~

来源:https://www.cnblogs.com/hahaa/p/17840607.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具