猿人学第十二题逆向分享

题目:

首先,抓取翻页数据包,发现接口为get请求方式,并且可以看出这个参数m被加密,但是现在这个参数m的加密方式或者编码方式我们还不知道,还得做进一步分析才能确定

然后,我们在看看接口的数据对不对

观察对比发现接口数据没有问题,接下来进行下一步操作

我们直接请求一下这个接口试一下,看看能不能请求到数据

直接请求接口,发现可以请求到数据,说明这个题目没有cookie验证

现在好办了,我们直接去看接口的请求调用堆栈,jquery是官方的,基本上不会有网站去魔改jquery,我们直接跳过,看request就行

这里我们看到了一个ajax请求,ajax是JS发包的一种形势,现在我们可以在ajax方法处打上一个断点,点击翻页,分析一下加密参数m的生成过程

现在我们可以确定加密参数m的生成过程了:
加密参数m是调用了btoa方法,将固定字符串'yuanrenxue'与当前页码window.page拼接生成

btoa()方法是 JS中用于将二进制字符串编码为 Base64 编码的 ASCII 字符串的方法,而base-64 解码使用方法是atob()

我们可以到控制台测试验证一下加密解密是否正确

测试验证结果一致,现在整个逆向过程就结束了,接下来就是编写代码,抓数据计算求值

代码展示如下:

import requests  
import base64  # 用于Base64编码
# 定义一个Base64编码函数
def btoa(text):
    return base64.b64encode(text.encode('utf-8')).decode('utf-8').replace("=", "%3D")
# 主爬虫函数
def myspider(pages):
    total_count = 0  # 总数值累
    for page in range(1, pages + 1):  # 遍历每一页
        #构造加密参数
        text = "yuanrenxue" + str(page)  # 生成原始字符串
        btoa_str = btoa(text)  # 调用自定义编码函数
        print(f"第{str(page)}页的m值为{btoa_str}")

        #发送请求
        headers = {
            'User-Agent': 'yuanrenxue.project',
        }
        cookies = {
            'sessionid': '用你自己的',  # 身份验证cookie
        }
        url = f"https://match.yuanrenxue.com/api/match/12?page={str(page)}&m={btoa_str}"
        response = requests.get(url, cookies=cookies, headers=headers)
        print(response.text)  # 打印原始响应数据
        #解析数据
        res_json_list = response.json().get('data', '')  # 提取data字段
        if res_json_list == '': continue  # 跳过空数据

        #处理当前页数据
        per_page_count = 0  # 当前页数值累加
        for item in res_json_list:
            value0 = item.get('value', '')  # 获取value字段
            value = 0 if value0 == '' else int(value0)  # 处理空值并转为整数
            per_page_count += value

        print(f"第{page}页的和为:{per_page_count}")
        total_count += per_page_count  # 累加到总数
    return total_count

if __name__ == "__main__":
    total_count = myspider(5)  # 执行爬取5页数据
    print(f"五页数字总和为:{total_count}")

代码运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值