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

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

Python实现JS逆向解密采集网站数据_第1张图片

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解释器没有设置好


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

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

  2. 点击齿轮, 选择add

  3. 添加python安装路径


pycharm如何安装插件?

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

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

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

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


尾语

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

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

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

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

你可能感兴趣的:(爬虫,python,javascript,开发语言,pycharm,学习,爬虫)