Python实现JS逆向解密采集网站数据

news/2024/7/19 10:13:06 标签: python, javascript, 开发语言, pycharm, 学习, 爬虫

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取


环境使用:

  • Python 3.8

  • Pycharm

  • nodejs


模块使用:

  • import requests --> pip install requests

  • import execjs --> pip install pyexecjs

  • import json


实现爬虫程序:

  1. 抓包分析数据在什么地方

    • 开发者工具抓包 --> F12

      当被禁止调用开发者工具的时候

  2. 选择其他年份的数据 --> XHR

    数据包接口: https://www.aqistudy.cn/historydata/api/historyapi.php

    • 加密参数:

      请求参数加密: hA4Nse2cT <√>

      响应数据加密:

  3. 分析加密数据生成规则 --> JS代码生成

    传入某些值<明文> 通过JS代码函数<加密方式>生成密文数据

    如何查找加密参数生成位置:

    1. 直接搜索关键字 hA4Nse2cT

    2. 通过启动器里面堆栈 send 打上断点

    先用python代码去请求链接获取响应加密数据

    大胆猜想, 小心实践

    hex_md5 --> MD5加密


代码展示

“”“导入模块”“”

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入编译JS代码模块
import execjs
# 导入数据请求模块
import requests
# 导入json模块
import json
# 导入csv模块
import csv
import pandas as pd

“”“发送请求”“”

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'
    }
    # 请求链接
    url = 'https://www.aqistudy.cn/historydata/api/historyapi.php'

“”“调用JS代码获取加密参数”“”

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
    # 读取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)

“”“保存数据”“”

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
    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)

模块安装问题:

  • 如果安装python第三方模块:

    1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

    2. pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:

    • 失败一: pip 不是内部命令

      解决方法: 设置环境变量

    • 失败二: 出现大量报红 (read time out)

      解决方法: 因为是网络链接超时, 需要切换镜像源

         清华:https://pypi.tuna.tsinghua.edu.cn/simple
         阿里云:https://mirrors.aliyun.com/pypi/simple/
         中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
         华中理工大学:https://pypi.hustunique.com/
         山东理工大学:https://pypi.sdutlinux.org/
         豆瓣:https://pypi.douban.com/simple/
         例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名
      
    • 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

      解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好
      或者你pycharm里面python解释器没有设置好


pycharmpython_182">如何配置pycharm里面的python解释器?

  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)

  2. 点击齿轮, 选择add

  3. 添加python安装路径


pycharm_192">pycharm如何安装插件?

  1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)

  2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese

  3. 选择相应的插件点击 install(安装) 即可

  4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效


尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇


http://www.niftyadmin.cn/n/5162230.html

相关文章

vite基础学习笔记:13.Dialog 对话框 (用户注册与登录)

说明&#xff1a;自学做的笔记和记录&#xff0c;如有错误请指正 1. Dialog 对话框组件 目标效果&#xff1a;点击“登录/注册”&#xff0c;弹框 &#xff08;1&#xff09;创建全局组件&#xff0c;在官网中查询代码粘贴 &#xff08;2&#xff09; 注册和使用全局组件 &a…

【算法与数据结构】216、LeetCode组合总和 III

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题可以直接利用77题的代码【算法与数据结构】77、LeetCode组合&#xff0c;稍作修改即可使用。   …

SpringCloud服务无法注册到Nacos的踩坑记录

文章目录 前言一、配置文件内容 前言 在使用nacos进行注册时&#xff0c;如果无法成功注册到nacos的服务器&#xff0c;有可能是springcloud和是springboot版本不对应的问题&#xff0c;也有可能是配置文件的问题。而我的问题就是配置文件的问题。我配置了server-addr&#xf…

uni-app多端开发

uni-app 多端开发 一、命令创建uni-app 项目二、在微信小程序后台找到 appId 填写 appId三、运行项目四、使用 uni-ui4-1、下载4-2、自动导入4-3、ts项目下载类型校验 &#xff08;uni-ui 组件库&#xff09;4-3-1、下载4-3-2、配置 五、持久化 pinia六、数据请求封装七、获取组…

2.7V 到 5.5V、串行输入、电压输出、16 位数模转换器MS5541/MS5542

MS5541/MS5542 是一款单通道、 16 位、串行输入、电压 输出的数模转换器&#xff0c;采用 2.7V 至 5.5V 单电源供电&#xff0c;输出范围 为 0V 至 V REF 。在输出范围内保证单调性&#xff0c;在温度范围为 -40 C 至 85 C 能够提供 1LSB INL 的 14 位精度。…

cmake vs2022编译opencv4.5.2 x86 版本

cmake 编译opencv 452 x86 版本 where is the source code 选项放置你的源文件 where to build the binaries 放置你生成结果的文件夹 点击按钮Configure,弹出提示&#xff0c;选择Win32&#xff0c;finishi 等待生成 列表中出现红色的选项&#xff0c;根据你的需要取消或…

ArcGIS 气象风场等示例 数据制作、服务发布及前端加载

1. 原始数据为多维数据 以nc数据为例。 首先在pro中需要以多维数据的方式去添加多维数据&#xff0c;这里的数据包含uv方向&#xff1a; 加载进pro的效果&#xff1a; 这里注意 数据属性需要为矢量uv&#xff1a; 如果要发布为服务&#xff0c;需要导出存储为tif格式&…

鹏芯微、鹏新旭、昇维旭——深圳三大芯片厂

三家产品不一样&#xff0c;鹏芯微做28到7nm&#xff0c;鹏新旭做40到28nm&#xff0c;昇维旭做DRAM(内存)。 都是深圳国资百分百控股主流12吋&#xff0c;产品是逻辑和DRAM&#xff0c;昇维旭建厂晚一些。 据说实际操盘的是华子。可能mate60的芯片就是鹏芯微做的。