当前位置: 首页 > article >正文

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

猿人学 — 第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

    在这里插入图片描述

  • 源码如下

    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.kler.cn/news/341986.html

相关文章:

  • 普中51单片机
  • java速成指南
  • linux部署NFS和autofs自动挂载
  • pytest框架之fixture测试夹具详解
  • 【docker】要将容器中的 livox_to_pointcloud2 文件夹复制到宿主机上
  • SQL自学:什么是子查询,如何使用它们
  • 【Iceberg分析】Spark与Iceberg集成落地实践(一)
  • MyBatis 数据表与实体映射的隐藏陷阱
  • AVL树如何维持平衡
  • 性能测试知识点
  • 【JavaEE】——回显服务器的实现
  • 手撕数据结构 —— 单链表(C语言讲解)
  • 论文阅读笔记-Are Pre-trained Convolutions Better than Pre-trained Transformers?
  • SAP_FI_表ACDOCA取代的表
  • 谷歌AI大模型Gemini API快速入门及LangChain调用视频教程
  • 如何实现不同VLAN间互通?
  • SSH 公钥认证:从gitlab clone项目repo到本地
  • 智能路由器hack技术
  • python 图片转icon图标
  • 大载重无人机物资吊运技术培训详解