自学内容网 自学内容网

猿人学 — 第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}")
    
    
  • 运行结果

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

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


原文地址:https://blog.csdn.net/Learner_HJ/article/details/142830898

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!