猿人学刷题系列(第一届比赛)——第三题

news2024/11/20 14:29:22

题目:抓取下列5页商标的数据,并将出现频率最高的申请号填入答案中

在这里插入图片描述

地址:https://match.yuanrenxue.cn/match/3

本题主要考察请求逻辑,可以借助fiddler或Charles等抓包工具进行分析。首先通过浏览器来简单进行请求逻辑分析。

在这里插入图片描述

从抓包情况来看,每一页的请求都会先请求一个jssm的包,如果有经验的话其实就知道这个主要就是用于监听cookie的,所以在下手的时候我们主要是先对这个jssm的数据包进行下手,然后保持会话状态再进行页面数据的获取。本题可以借助postman或其他测试工具进行调试。文章中就不多此一举了直接通过代码来实现,首先分析jssm包,根据头部信息初步实现请求代码。

import requests
from collections import Counter


url = 'https://match.yuanrenxue.cn/api/match/3?page=%s'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}
session = requests.session()
session.headers = headers

for i in range(1, 6):
    session.post('https://match.yuanrenxue.cn/jssm')
    response = session.get(url%i)
    res_data = response.text
    print(res_data)
    break

执行结果:

在这里插入图片描述

从执行结果来看,返回了一串混淆的js代码,而这段代码解码之后是一个undefined所以并没有什么实际意义,那么就需要对前置请求进行处理,也就是先来对jssm这个请求进行分析。请求头中添加cookie进行访问然后查看响应内容。

在这里插入图片描述

可以看到上图中,对于jssm这个请求是没有响应内容的,同时页面数据页没有获取到,那么也就是说前置请求我们并没有获取到准确的session内容,但是根据分析可知jssm这个请求按理是会有一个cookie返回的,这一点从浏览器中分析也可得到。如下图所示:

在这里插入图片描述

所以我们就来输出看看响应中是否设置了新的cookie值。

在这里插入图片描述

很明显,这一次请求并没有cookie值返回,那么是什么原因导致的呢?这个请求是否有什么参数需要传递呢?很明显,参数传递我们直接能够从头部信息中看得出来是没有的,那么问题多数就是出现在请求头中了,所以我们来将请求头参数补齐再来访问试试呢。

在这里插入图片描述

补齐请求头之后发现仍然是没有数据的,那么问题就来了,既然没有相关参数传递,cookie又是经过这个jssm包返回,那为什么补齐请求头参数之后仍然没有cookie返回呢?不慌,我们来通过fiddler再观察一下。

在这里插入图片描述

通过fiddler中的来看的话,代码中的请求与此处抓到的包中,最大的区别也就是请求头参数的顺序区别了,刷新几次页面(或者翻页)再观察一番看看(此处不再贴图演示)。会发现请求头的顺序在fiddler中是固定的一个顺序(与浏览器中看到的是不同的,浏览器会根据字母顺序进行排列),那也就是说极有可能是因为请求头参数的配置顺序导致我们代码无法成功获取到cookie了,所以将fiddler中的请求头参数复制下来重新配置一下再请求。

在这里插入图片描述

搞定,成功通过jssm获取到cookie,接下来就可以进一步访问获取页面数据啦。代码如下:

import requests
from collections import Counter


url = 'https://match.yuanrenxue.cn/api/match/3?page=%s'
headers = {
    'Host': 'match.yuanrenxue.cn',
    'Connection': 'keep-alive',
    'Content-Length': '0',
    'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
    'sec-ch-ua-mobile': '?0',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'sec-ch-ua-platform': '"Windows"',
    'Accept': '*/*',
    'Origin': 'https://match.yuanrenxue.cn',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Dest': 'empty',
    'Referer': 'https://match.yuanrenxue.cn/match/3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cookie': '替换为自己的cookie',
}


session = requests.session()
session.headers = headers
for i in range(1, 6):
    session.post('https://match.yuanrenxue.cn/jssm')
    response = session.get(url%i)
    print(response.json())

在这里插入图片描述

获取到每一页的数据之后就是要从这些数据中找出出现频率最高的申请号,此处提供的方案是将所有数据添加到列表中进行计数排序,不再详解过程(实在不会就目测,冷笑话…提供完整代码,看不懂可私信本人讲解)。

完整代码

import requests
from collections import Counter


url = 'https://match.yuanrenxue.cn/api/match/3?page=%s'
headers = {
    'Host': 'match.yuanrenxue.cn',
    'Connection': 'keep-alive',
    'Content-Length': '0',
    'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"',
    'sec-ch-ua-mobile': '?0',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'sec-ch-ua-platform': '"Windows"',
    'Accept': '*/*',
    'Origin': 'https://match.yuanrenxue.cn',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Dest': 'empty',
    'Referer': 'https://match.yuanrenxue.cn/match/3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cookie': '替换为自己的cookie',
}


session = requests.session()
session.headers = headers
lst = []
for i in range(1, 6):
    session.post('https://match.yuanrenxue.cn/jssm')
    response = session.get(url%i)
    json_data = response.json()
    for dic in json_data.get('data'):
        lst.append(dic.get('value'))

print(lst)
count = dict(Counter(lst))
max_value = sorted(count.items(), key=lambda a: a[-1])[-1][0]
print(max_value)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统下消息中间件RocketMQ下载、安装、搭建、配置、控制台rocketmq-dashboard的安装保姆级教程 rocketmq ui

这里给出我使用的 RocketMQ 版本(5.1.3)、RocketMQ-Dashboard 版本的百度网盘链接: 链接:https://pan.baidu.com/s/1HaKBBDGWZ0WKLGgVwIG9pw 提取码:1234 文章目录 一. 官网下载安装二、启动NameServer三、启动Broker四…

Linux学习之初识Linux

目录 一.Linux的发展历史及概念 1.什么是Linux UNIX发展的历史: Linux发展历史: 2. 开源 商业化发行版本 二. 如何搭建Linux环境 Linux 环境的搭建方式主要有三种: 1. 直接安装在物理机上 2. 使用虚拟机软件 3. 使用云服务器 三. …

4.SpringCloud

1.SpringCloud概述 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,…

【游戏评测】河洛群侠传一周目玩后感

总游戏时长接近100小时,刚好一个月。 这两天费了点劲做了些成就,刷了等级,把最终决战做了。 总体感觉还是不错的。游戏是开放世界3D游戏,Unity引擎,瑕疵很多,但胜在剧情扎实,天赋系统、秘籍功法…

读书笔记 |【项目思维与管理】➾ 成功的项目需要有效的管理

读书笔记 |【项目思维与管理】➾ 成功的项目需要有效的管理 一、项目:一项难以完成的使命二、要管理项目先要理解"管理"三、项目管理成功的标准四、使项目利益相关者满意 💖The Begin💖点点关注,收藏不迷路💖 如果你没有…

Activity启动模式中的生命周期

彻底明白Activity启动模式中的生命周期,从此不再成为面试难点。 参考: https://www.zhihu.com/tardis/zm/art/429845377?source_id1003 https://developer.aliyun.com/article/951609 https://cloud.tencent.com/developer/article/1763205 Activity…

2020年9月全国计算机等级考试真题(C语言二级)

2020年9月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 有下列程序&#xff1a; #include<stdio.h> main() { FILE*fp;int k,n,a[6]{1,2,3,4,5,6}; fpfopen("d2.dat","w"); fprintf(fp,"%d%d%d\n",a[0],…

代码随想录章节目录—力扣算法题系列:数组.Java版(可点击文中超链接跳转到想看的题目)

版本说明 当前版本号[20230816]。 版本修改说明20230816初版 目录 文章目录 版本说明目录数组总结篇数组理论基础数组的经典题目二分法双指针法滑动窗口模拟行为 总结 数组总结篇 数组理论基础 数组是非常基础的数据结构&#xff0c;在面试中&#xff0c;考察数组的题目一…

B-树和B+树的区别

B-树和B树的区别 一、B-tree数据存储 在下图中 P 代表的是指针&#xff0c;指向的是下一个磁盘块。在第一个节点中的 16、24 就是代表我们的 key 值是什么。date 就是这个 key 值对应的这一行记录是什么。 假设寻找 key 为 33 的这条记录&#xff0c;33 在 16 和 34 中间&am…

Kubernetes入门 五、深入Pod:探针和生命周期

目录 探针探针类型LivenessProbeReadinessProbeStartupProbe&#xff1a; 探测方式ExecActionTCPSocketActionHTTPGetAction 参数配置操作示例 生命周期钩子函数生命周期 探针 所谓的探针就是容器内应用的监测机制&#xff0c;为了确保容器在部署后确实处在正常运行状态。 比…

系统驱动-点亮LED灯

实现LED点亮 demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/device.h> #include "head.h" int major; char kbuf[12…

GitHub星标11.9k的机器学习开源项目分享,3 万行代码,30多个主流模型

今天给大家分享一个超剽悍的开源项目&#xff0c;目前在github上已获11.9k星标。 项目作者是普林斯顿博士后David Bourgin&#xff0c;他用 NumPy 手推了一大波 ML 模型&#xff0c;基本上把主流模型都实现了一遍&#xff0c;这个工作量我直呼牛X。 虽然现在手写模型已经不是…

星星之火:国产讯飞星火大模型的实际使用体验(与GPT对比)

#AIGC技术内容创作征文&#xff5c;全网寻找AI创作者&#xff0c;快来释放你的创作潜能吧&#xff01;# 文章目录 1 前言2 测试详情2.1 文案写作2.2 知识写作2.3 阅读理解2.4 语意测试&#xff08;重点关注&#xff09;2.5 常识性测试&#xff08;重点关注&#xff09;2.6 代码…

摄影馆预约小程序开发指南:打造高效预约管理系统

随着数字化时代的到来&#xff0c;越来越多的行业开始借助互联网工具提升服务质量和效率。摄影行业也不例外&#xff0c;为了更好地满足用户的需求&#xff0c;许多摄影店开始搭建预约小程序&#xff0c;方便用户在线预约和管理。 首先&#xff0c;进入乔拓云网后台&#xff0c…

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测

回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测 目录 回归预测 | MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 MATLAB实现BiLSTM双向长短期记忆神经网络多输入多输出预测&#x…

深入剖析低代码平台的优势与挑战

近年来&#xff0c;我国高度重视数字经济的发展&#xff0c;强化数字技术创新应用&#xff0c;全面推进企业数字化转型工作。在全国各行业数字化转型的浪潮中&#xff0c;低代码通过可视化、模块化开发操作&#xff0c;降低软件开发门槛&#xff0c;强化资源扩展和信息集成&…

分布式学习:从分布式系统的特征开始

正文   在延伸feature&#xff08;分布式系统需要考虑的特性&#xff09;的时候&#xff0c;我逐渐明白&#xff0c;这是因为要满足这些feature&#xff0c;才设计了很多协议与算法&#xff0c;也提出了一些理论。比如说&#xff0c;这是因为要解决去中心化副本的一致性问题&…

司徒理财:8.16黄金行情走势分析及策略美盘看涨

黄金早盘已经给了1902的现价多单&#xff0c;日内最高触及1907&#xff01;如期拉升&#xff01;黄金现在筑底阶段&#xff0c;维持低多看涨思路&#xff0c;美盘1900附近继续做多看涨&#xff0c;等待反弹&#xff01;黄金现在的下跌已经到达日线前低位置&#xff0c;继续破位…

程序员的新型生产力工具,效率起飞了~

文章目录 一、低代码平台存在的意义 二、国内外低代码开发研究现状 三、低代码开发平台设计与实现 系统架构总体设计 01.表单引擎设计 02.流程引擎设计 03.数据库设计 四、总结 一、低代码平台存在的意义 传统软件开发交付链中&#xff0c;需求经过3次传递&#xff0c;用户→业…

录取查询页面怎么做?

招生录取工作开始后&#xff0c;负责招生的老师需要完成一系列任务&#xff0c;其中包括确定招生录取名单和及时向考生公布录取情况。为了快速完成录取查询工作的发布&#xff0c;招生老师们可以采取以下步骤&#xff1a; 1. 整理录取名单&#xff1a;招生老师们首先需要整理好…