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

news2024/10/5 22:22:34

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

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的选项 点击确定, 重启即可生效


尾语

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告诉大家4个常见的免费备份方法!

​什么是不花费一分钱的数据备份方式&#xff1f;对于那些有特殊兴趣爱好的用户来说&#xff0c;他们的常用存储设备里往往会充满各种各样丰富的数据。举个例子&#xff1a;对于那些热衷于探索四方的旅行者&#xff0c;随着他们足迹的延展&#xff0c;需要对数量众多的美丽景色…

每日汇评:黄金正在期待鲍威尔的讲话以获取新的方向动力

周三早盘&#xff0c;金价盘整了连续两天的跌势&#xff0c;等待鲍威尔发言&#xff1b; 美元在不同的美联储评论和风险偏好减弱的情况下寻求方向&#xff1b; 黄金价格确认了上升三角形的突破&#xff0c;但美债收益率较低可能会限制跌幅&#xff1b; 周二早些时候&#xf…

零基础Linux_26(多线程)线程池代码+单例模式+线程安全

目录 1. 线程池 1.1 前期代码 thread.hpp 1.2 加上锁的代码 lockGuard.hpp 1.3 加上任务的代码 1.4 加上日志的代码 log.hpp Task.hpp 2. 单例模式的线程安全 2.1 线程池的懒汉模式 threadPool.hpp testMain.cc 3. STL和智能指针的线程安全 4. 笔试题 答案及解…

KubeSphere v3.4.0 部署K8S Docker + Prometheus + grafana

KubeSphere v3.4.0 部署K8S 1、整体思路2、修改linux主机名3、 离线安装3.1 问题列表3.2 执行命令成功列表 1、整体思路 将KubeSphere v3.4.0 安装包传输到其中一台机器修改Linux主机名&#xff08;选取3台&#xff0c;修改为master01、master02、master03&#xff09;安装官方…

箭头函数 跟匿名函数this的指向问题

var id 10; function foo() {// 创建时 this->windowthis.id 20; // 等价于 window.id 20let c () > {console.log("id1:", this.id); // 创建时父级 创建时 this->window};let d function () {console.log("id2:", this.id); // 执行时本…

全面解析:如何快速搭建AI数字人系统源码,都有哪些平台?

随着数字人直播系统的兴起&#xff0c;越来越多的人对数字人直播系统源码搭建感兴趣。数字人直播系统源码在一些市场上是可以找到的&#xff0c;但是鱼目混杂、五花八门想要找一个合适自己的就需要一定技巧&#xff0c;要选择一个技术专业的AI数字人直播系统源码服务商。下面是…

【IO多路转接】pollepoll

文章目录 1 :peach:poll:peach:1.1 :apple:poll函数接口:apple:1.2 :apple:poll接口的使用:apple:1.3 :apple:poll的优缺点:apple: 2 :peach:epoll:peach:2.1 :apple:epoll函数接口:apple:2.1.1 :lemon:epoll_create:lemon:2.1.2 :lemon:epoll_ctl:lemon:2.1.3 :lemon:epoll_wa…

OGG将Oracle全量同步到kafka

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

C语言之pthread_once实例总结(八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

ClickHouse介绍和使用

ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区&#xff08;可选&#xff09;4.3.2. primary key 主…

微信小程序将后端返回的图片文件流解析显示到页面

说明 由于请求接口后端返回的图片格式不是一个完整的url,也不是其他直接能显示的图片格式&#xff0c;是一张图片 后端根据模板与二维码生成图片,返回二进制数据 返回为文件流的格式,用wx.request请求的时候&#xff0c;就自动解码成为了下面这样的数据数据格式,这样的数据没…

Spring的缓存机制-循环依赖

群公告 Java每日大厂面试题&#xff1a; 1、Spring 是如何解决循环依赖&#xff1f; 答案&#xff1a;三级缓存&#xff0c;简单来说&#xff0c;A创建过程中需要B&#xff0c;于是A将自己放到三级缓存里面&#xff0c;去实例化B&#xff0c;B实例化的时候发现需要…

智能AI系统ChatGPT系统源码+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

交流负载发电机测试

交流负载发电机测试是一种常用的测试方法&#xff0c;用于评估发电机在负载条件下的性能和稳定性。测试过程中需要使用负载设备模拟实际负载&#xff0c;并通过测量电压、电流、功率等参数来评估发电机的输出能力和稳定性。 在进行测试之前&#xff0c;首先需要准备好测试设备和…

30张图详解IP地址网络知识

你们好&#xff0c;我的网工朋友。 IP地址是所有网络初级课程里最先涉及到的技术点&#xff0c;对于IP地址的合理规划是网络设计的重要环节&#xff0c;必须拿捏。 IP地址规划的好坏&#xff0c;影响到网络路由协议算法的效率&#xff0c;影响到网络的性能&#xff0c;影响到网…

短剧出海火爆,Flat Ads独家流量助泛娱乐赛道App迅速获客增长

10月26日&#xff0c;由扬帆出海主办的GICC2023 | 第四届全球互联网产业CEO大会正式圆满落幕&#xff0c;Flat Ads等出海企业应邀参加。 据悉&#xff0c;本届GICC深圳站邀请200CXO行业领袖、300各路优质厂商、1200全球互联网产业代表共聚一堂&#xff0c;聚焦短剧、游戏、泛娱…

最前端|如何使用Plausible实现页面埋点?

目录 一、业务背景 二、业务场景描述 三、解决方案 //如何集成 Plausible &#xff1f; //如何监控特定功能使用情况&#xff1f; 什么是 MyEventName? //如何向自定义事件传递参数&#xff1f; 一、业务背景 随着公司自研产品的不断发展&#xff0c;对前端页面的监控和…

强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm)

强力解决使用node版本管理工具 NVM 出现的问题&#xff08;找不到 node&#xff0c;或者找不到 npm&#xff09; node与npm版本对应关系 nvm是好用的Nodejs版本管理工具&#xff0c; 通过它可以方便地在本地调换Node版本。 2020-05-28 Node当前长期稳定版12.17.0&#xff0c;…

适用于Linux桌面歌词应用程序MusixMatch

导读Musixmatch桌面应用程序可用于Linux&#xff01;不是Linux用户缺少桌面歌词应用程序。包括“即时歌词”和“Lyricfier”&#xff0c;许多开源音乐播放器都会运用某种歌词集成。 但是Musixmatch应用程序与那些有点不同。 Musixmatch的USP是Syncronized歌词 如果您曾经使用…

如何选择高效率的在线分板机主轴?

随着智能移动设备和其他电子3C设备需求的增大&#xff0c;PCB分板机的需要也随之而大增。越来越多的企业开始使用在线分板机来替代传统的手工分板&#xff0c;从而提升了生产效率&#xff0c;提高了产品质量&#xff0c;降低了生产成本。在分板机设备中&#xff0c;高速主轴是关…