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

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

猿人学 — 第1届第17题

  • 根据题目“天杀的Http2.0”大概知道,请求的协议应该遵照的是Http2.0协议,并且目标网站专门对此进行了检测,在Network面板中右键表头,勾选Protocol

    在这里插入图片描述

  • 果不其然,一堆请求都是遵照Http2.0协议。而urllibrequest只支持HTTP/1.1协议访问,因此面对强制使用HTTP/2.0协议访问的网站无法爬取数据,所以这里选择支持HTTP/2.0协议访问的httpx

  • 继续抓包分析可知,http://match.yuanrenxue.cn/match/17请求的响应体中返回了Set-Cookie,设置了sessionid。可知必须先请求对其请求获取sessionid后再进行后续请求

    在这里插入图片描述

  • 源码如下

    import httpx
    
    # httpx和requests的很多API存在相似之处;httpx.Client()可以类比于requests.session();默认还是使用HTTP/1.1,需手动设置http2=True;
    client = httpx.Client(http2=True)
    client.headers = {
        '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',
        # Cookie中的sessionid设置成你自己的值
        'Cookie': 'Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1728646875; HMACCOUNT=BD815CA35CFECED8; qpfccr=true; no-alert3=true; Hm_lvt_9bcbda9cbf86757998a2339a0437208e=1728646879; tk=8258780053392544352; sessionid=a9wal1kcrtwt2wgpyyjimyt51b7pfnrp; yuanrenxue_cookie=1728647008|j2IWzkR0SjEFNNDLGkXnNoHOJ6Y9ZJz9yN8NacPCQOQUy; Hm_lpvt_9bcbda9cbf86757998a2339a0437208e=1728647129; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1728647270'
    }
    # 获取Cookie
    client.get(url='https://match.yuanrenxue.cn/match/17')
    
    # 下次请求前注意设置请求头中的Referer
    client.headers.update({'Referer':'https://match.yuanrenxue.cn/match/17'})
    total_value = 0
    for pid in range(1,6):
        res = client.get(url=f'https://match.yuanrenxue.cn/api/match/17?page={pid}')
        data = res.json()['data']
        print(data)
        for item in data:
            total_value += item['value']
    print(f"求和:{total_value}")
    
    
  • 运行结果如下

    在这里插入图片描述

  • 以上解题思路和源码若有错误、不合理或值得优化的地方,欢迎各位大佬不吝赐教,批评指正!

相关文章:

  • 【Lua学习】字符串string和字符串标准库
  • 充电宝租赁管理系统网站毕业设计SpringBootSSM框架开发
  • Ultralytics_yolov10目标检测,预处理函数入口
  • vue代码中关于字符串对比的实现
  • Kubernetes--深入理解Pod资源管理
  • 代码随想录算法训练营第三十天|491. 非递减子序列,46. 全排列,47. 全排列 II,332. 重新安排行程,51. N 皇后,37. 解数独
  • Robust多模态模型的开发
  • JS设计模式之职责链模式:优雅地处理请求流程
  • 【大数据】Hive快速入门
  • 【工具】前端js数字金额转中文大写金额
  • git的提取和拉取有啥区别
  • LeetCode整数转罗马数字
  • 使用NumPy进行线性代数的快速指南
  • 内网Debian\Ubuntu服务器安装dep包,基于apt-rdepends下载相关依赖
  • Reverse Tabnabbing漏洞的理解和利用
  • SQLite数据库
  • 前端 | Uncaught (in promise) undefined
  • 通过Express + Vue3从零构建一个用户认证与授权系统(一)项目结构设计
  • 241007深度学习之LeNet
  • C++入门基础知识107—【关于C++continue 语句】