猿人学 — 第1届第13题(解题思路附源码)

ops/2024/10/11 2:43:52/

猿人学 — 第1届第13题(解题思路附源码)

  • 发现在翻页过程中,只要中途有几秒的间隔,那么就会显示拉取数据失败,然后网页重新加载回到刚进来显示的第一页的情况
    在这里插入图片描述

  • 重新加载时,会发送一系列的请求,发现其中向地址https://match.yuanrenxue.cn/match/13发送一前一后两个请求,
    在前一个请求中,发现响应头中有Set-Cookie,因此猜测若想访问各个页面则需要先访问这个请求获取sessionid
    在这里插入图片描述

  • 另外还发现,后一个请求中携带的Cookie中的yuanrenxue_cookie与前一个请求中携带的不一样,并且在目标页面访问过程中
    携带的yuanrenxue_cookie和后一个请求中携带的是一样的

    在这里插入图片描述
    在这里插入图片描述

  • 那么后面请求中的yuanrenxue_cookie是从哪里来的呢?这个Cookie值的改变发生在第一次向https//match.yuanrenxue.cn/match/13请求后,
    但是在chrome中又没有看到这个请求的返回值,猜想是不是返回值在chrome中不支持显示,因此用Fildder抓包再看一看各个请求的具体情况,验证一下猜想
    在这里插入图片描述

  • 果然发现这个请求其实是有返回值的,我们把关键信息放入Console面板一输出再比对请求,发现这就是我们想要的yuanrenxue_cookie

    在这里插入图片描述

  • 源码如下

    python">import re
    import requests# 创建会话并设置请求头和cookie
    obj = requests.session()
    obj.headers={'Referer':'https://match.yuanrenxue.cn/list','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like 	Gecko) Chrome/129.0.0.0 Safari/537.36',
    }
    # 设置成自己的sessionid
    obj.cookies.set('sessionid','k0tkqbv28g7ubtjyr1e5a3mjcyzz98uf')# 获取更新后的yuanrenxue_cookie值
    res = obj.get(url='https://match.yuanrenxue.cn/match/13')
    cookie_list = eval(re.findall('\(.*\)',res.text)[0]).split('=')
    obj.cookies.update({cookie_list[0]:cookie_list[1]}
    )
    # 访问具体页面时一定要注意先更新请求头信息中的Referer
    obj.headers.update({'Referer':'https://match.yuanrenxue.cn/match/13'})# 向各个页面发送请求并获取数据
    total_value = 0
    for pid in range(1,6):res = obj.get(url=f'https://match.yuanrenxue.cn/api/match/13?page={pid}')data = res.json()['data']print(f"第{pid}页数据:{data}")for item in data:total_value += int(item['value'])print(f"前5页数字总和:{total_value}")
  • 运行结果

    在这里插入图片描述
    在这里插入图片描述

  • 笔者为刚接触逆向的小白,若上面有错误、不合理和值得优化的地方,欢迎各位大佬批评指正!


http://www.ppmy.cn/ops/123769.html

相关文章

【QT Qucik】C++交互:接收QML信号

在本节课中,我们将深入探讨如何在C中接收QML发出的信号。我们将分为几个部分,详细说明信号的定义、发送及其在C中的接收。 理解信号和槽机制 Qt的信号与槽机制是一种用于对象之间通信的强大工具。信号是对象在特定事件发生时发送的通知,而槽…

性能测试笔记2-总

安装路径:先装jdk,后装JMeter 安装JDK: 下载JDK – 安装JDK – 配置环境变量 – 验证 安装Jmeter: 下载Jmeter – 安装Jmeter – 配置环境变量 – 启动验证 注意点: 下载JDK时,注意电脑操作系统是32位/64位 下载…

回归分析在数据挖掘中的应用简析

一、引言 在数据驱动的时代,数据挖掘技术已成为从海量数据中提取有价值信息的关键工具。 回归分析,作为一种经典的统计学习方法,不仅在理论研究上有着深厚的基础,而且在实际 应用中也展现出强大的功能。 二、回归分析基础 2.1 回…

R语言绘制散点图

散点图是一种在直角坐标系中用数据点直观呈现两个变量之间关系、可检测异常值并探索数据分布的可视化图表。它是一种常用的数据可视化工具,我们通过不同的参数调整和包的使用,可以创建出满足各种需求的散点图。 常用绘制散点图的函数有plot()函数和ggpl…

MyBatis 数据表与实体映射的隐藏陷阱

这两天在处理一个线上问题时,发现Mybatis数据表和实体映射的时候会埋一个坑。这个问题看似微小,但却可能在关键时刻给我们带来不小的困扰。接下来,让我们深入剖析这个问题,并探究其发生的根源。 一、问题描述 我们在使用 Mybati…

Springboo通过http请求下载文件到服务器

这个方法将直接处理从URL下载数据并将其保存到文件的整个过程。下面是一个这样的方法示例: import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection…

git fetch 和 git pull 的区别

git fetch 和 git pull 的区别 git fetch 功能:git fetch 用于从远程仓库获取最新的代码和提交信息,并将其保存到本地仓库的相应远程跟踪分支中,不会自动合并或修改当前的工作目录或当前分支。 合并:此命令不会自动合并获取的更新…

vue双向绑定/小程序双向绑定区别

Vue双向绑定与小程序双向绑定在实现方式、语法差异以及功能特性上均存在显著区别。以下是对这两者的详细比较: 一、实现方式 Vue双向绑定 Vue的双向绑定主要通过其响应式数据系统实现。Vue使用Object.defineProperty()方法(或在Vue 3中使用Proxy对象&am…