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

猿人学web端爬虫攻防大赛赛题第13题——入门级cookie

1. F12开发者模式

刷新第一页,仔细研究发现里面有三次请求名为13的请求,根据题目提示cookie关键字,所以主要留意请求和响应的cookie值。

三次请求都带了sessionid,说明存在session(后面写代码要用session来写)。

另外,还都带了一个cookie键值:yuanrenxue_cookie,如下

image-20210226111634464

在这三个请求的响应中,可以看到,第一次请求看不到返回了什么,第二次请求返回页面结构,第三次请求是返回数据。

接下来就先找找yuanernxue_cookie这个是在哪里设置的。

2. 源码分析

右键查看源码,直接返回下面内容:

<script>document.cookie=('y')+('u')+('a')+('n')+('r')+('e')+('n')+('x')+('u')+('e')+('_')+('c')+('o')+('o')+('k')+('i')+('e')+('=')+('1')+('6')+('1')+('4')+('3')+('0')+('9')+('8')+('6')+('8')+('|')+('N')+('k')+('5')+('M')+('6')+('I')+('X')+('U')+('G')+('X')+('O')+('m')+('a')+('L')+('E')+('t')+('8')+('5')+('i')+('3')+('M')+('0')+('Y')+('6')+('R')+('m')+('8')+('y')+('b')+('G')+('N')+('u')+('O')+('R')+('W')+('E')+('J')+('a')+';path=/';location.href=location.pathname+location.search</script>

这个应该就是第一个请求中的代码,因为其他请求源码都不是这个。

代码是先设置两个cookie,直接在console中调试即可看到:

image-20210226112746964

这里cookie值跟上面第一张图片中的不相等,是因为服务器有session时长,加载页面一小段时间后,我们再右键查看源码其实会重新获取session,也就是重新从第一次请求开始,所以返回的内容就是设置cookie的代码。

注意:如果在刷新页面后,立即右键查看源代码,看到的就是所有请求完成后的页面源码了。

接下来写个代码调试一下,用代码来获取其中的cookie,并添加到session中。

3. 编写代码

首先写第一次请求,是访问http://match.yuanrenxue.com/match/13,并且记住要用session建立连接,因为要保持连接状态,不然会重置cookie,如下:

import requests
import re
import jsondef get_cookie():url = f'http://match.yuanrenxue.com/match/13'session = requests.Session()response = session.get(url)print(response.text)if __name__ == '__main__':get_cookie()

结果如图:

image-20210226113655453

加个正则匹配一下,顺便设置到cookie中去:

import requests
import re
import jsondef get_cookie():url = f'http://match.yuanrenxue.com/match/13'session = requests.Session()response = session.get(url)print(response.text)s = ''.join(re.findall("\(\'([\w=|])\'\)", response.text))print(s)cookie_key, cookie_value = s.split('=')session.cookies.set(cookie_key, cookie_value)return sessionif __name__ == '__main__':session = get_cookie()

输出结果如下:

image-20210226113924399

最后用设置好的session直接请求api:

import requests
import re
import jsondef get_cookie():url = f'http://match.yuanrenxue.com/match/13'session = requests.Session()response = session.get(url)print(response.text)s = ''.join(re.findall("\(\'([\w=|])\'\)", response.text))cookie_key, cookie_value = s.split('=')session.cookies.set(cookie_key, cookie_value)return sessiondef get_response(session, page):url = f'http://match.yuanrenxue.com/api/match/13?page={page}'headers = {'User-Agent': 'yuanrenxue.project',}response = session.get(url, headers=headers)return json.loads(response.text)if __name__ == '__main__':session = get_cookie()sum = 0for i in range(1, 6):data = get_response(session, i)['data']for d in data:sum += d['value']print(sum)

输出结果:

image-20210226123719772

http://www.xdnf.cn/news/3197.html

相关文章:

  • 完美解决react-native文件直传阿里云oss问题一
  • Android学习总结之自定义view设计模式理解
  • Redis热key大key详解
  • ESP32开发-通过ENC28J60模块实现以太网设备
  • 从实列中学习linux shell6: 写一个 shell 脚本 过滤 恶意ip 攻击
  • css 数字从0开始增加的动画效果
  • 【数学建模国奖速成系列】优秀论文绘图复现代码(二)
  • DeepSeek V1:初代模型的架构与性能
  • 艺术与科技的双向奔赴——高一鑫荣获加州联合表彰
  • Java ResourceBundle 资源绑定详解
  • 腾讯元宝桌面客户端:基于Tauri的开源技术解析
  • Python GIL 与 pybind11 GIL管理机制
  • 模拟flexible.js 前端开发中的大屏布局方案
  • Hadoop虚拟机中配置hosts
  • 评价类模型数据预处理(定量指标值的无量纲化处理)
  • 从零构建 MCP Server 与 Client:打造你的第一个 AI 工具集成应用
  • 如何禁止AutoCAD这类软件联网
  • Go语言的发展历史 -《Go语言实战指南》
  • Copilot:您的AI伴侣-微软50周年系列更新
  • 《Java高级编程:从原理到实战 - 进阶知识篇一》
  • 【阿里云大模型高级工程师ACP学习笔记】2.7 通过微调增强模型能力 (下篇)(⭐️⭐️⭐️ 重点章节!!!)
  • C#学习第20天:垃圾回收
  • C#规避内存泄漏的编码方法
  • ZStack Cloud 5.3.28正式发布
  • 【蓝桥杯省赛真题59】Scratch收集松果 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • 跨境电商生死劫:IP筛查三法则破解封号魔咒
  • 编译原理实验二:构建TINY语言的词法分析器
  • 【数据链路层】网络通信的“桥梁建设者”
  • 在Carla中构建自动驾驶:使用PID控制和ROS2进行路径跟踪
  • WPF性能优化举例