python高考查分_python爬虫 查询全国大学专业的录取情况

估计很多人在填报高考自愿的时候都会难以选择学校,有自己心仪的专业,但是在网上搜了半天也不能确定填哪一所学校。如果填了录取分数线低的,那将会浪费很多分数,表示有点遗憾。如果没有录取上,那就更遗憾了… 在我们想根据专业来选择学校的时候,往往会有很多学校无法被自己根据专业搜索到,但又很适合自己,全国那么多学校,大好的机会就只能完美错过了。所以,该怎么把全国所有带有该专业的学校和往年的录取分数线一起找出来,并进行录取分数对比呢?

数据来源: 高考数据库

操作环境: win10, python3.6, jupyter notebook,谷歌浏览器(都不是必选项)

获取内容: 学校、往年的理科录取情况(最高分,平均分,最低分,最低位次, 录取批次)

实现思路:

获取高考数据库的数据接口

查询数据

技术实现讲解

1、查找高考数据库的数据接口

1.1、获取某校的高考录取情况

(1)直接搜索学校,在《XX大学高考分数线_招生信息_中国教育在线》中查看录取分数线,找到专业分数线,(也可以在官网中搜索学校),右击检查。

d416816b2d7c7f91620731963cc0c508.png

(2)粘贴刚才复制的链接到浏览器中看看是否存在我们需要的数据

edbc7505e7b372e7397f403f04146114.png

1.2、分析其他的数据接口

我们需要的数据都在其中,但这只是一个学校的,我们要怎么查看其他学校的呢?不妨多对比一下其他学校的数据接口吧

ceede536208076104033bf58eff366af.png

通过对比,发现每个学校链接的id值都不同,如“贵州财经大学”的school_id=520,只需要分别传值给这个链接,就可以获取该系统所有学校的路径了,除了没有填写录取分数线的学校。除此之外,上面还有时间,从网页中可以发现它也对应了每个学校的时间,就可以根据它来查询年度。

9aa45163d01a6603c92efa6b2ee4a4cb.png

2、查询数据

2.1、请求数据

熟悉了网页数据的结构后,就可以请求数据开始提取了,导入requests库请求数据,网页使用的是post方法请求,一定要注意请求的方法。导入time库间断请求时间,并制作请求头模拟浏览器请求数据,告诉服务器这是一个浏览器来请求数据。

import requests,time #导入库

#制作请求头

headers={

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'

}

major = input("请查询输入专业:")

times = input("请输入查询年份(2014~2018):")

for i in range(32,968,1):#id 从32到967

url = f'https://api.eol.cn/gkcx/api/?access_token=&local_province_id=52&local_type_id=1&page=1&school_id={i}&signsafe=&size=20&uri=apidata/api/gk/score/special&year='+str(times)

time.sleep(0.1)

res = requests.post(url=url,headers=headers)

你可能会好奇为什么id是从32~968呢?因为并不是每个id都有数据,如id为“1”的结果为:

{"code":"0000","message":"成功","data":{"numFound":0,"item":[]},"md5":"F03C3B1E12B97478ED80E3868E2EEA94"}

通过id值测验,发现没有内容的id接口都会返回这个值

"md5":"F03C3B1E12B97478ED80E3868E2EEA94"

我们就可以通过它来过滤掉没有数据的接口,并确定id的总长度。

import requests,time

headers={

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'

}

for i in range(1,1000):#预设学校id有999个,[ 1,1000)

url = f'https://api.eol.cn/gkcx/api/?access_token=&local_province_id=52&local_type_id=1&page=1&school_id={i}&signsafe=&size=20&uri=apidata/api/gk/score/special&year=2018'

time.sleep(0.1)

res = requests.post(url=url,headers=headers)

if res.json()['md5'] =='F03C3B1E12B97478ED80E3868E2EEA94':

print ("学校id",i,"不存在")

else:

print (res.json()['md5'])

运行结果:

学校id 1 不存在

学校id 2 不存在

学校id 3 不存在

...............#省略部分输出

学校id 30 不存在

学校id 31 不存在

EAA4D9DA22841248D9826B8CF6641F95

B7FD4BC855287B5788366520335B54B4

4653CF0302C731E679E5D1F765A20FE6

...............#省略部分输出

学校id 964 不存在

学校id 965 不存在

8CCBA1E84159C24BA81B3E647198F7FF

98062D0DAFF19F39CA094E714645DB6D

学校id 968 不存在

学校id 969 不存在

...............#省略后面输出

通过这样查找测试,我们就能确定学校id的长度了,同时这样也可以省下前面id的查找时间。

2.2、提取数据

我们请求到的数据是字典型,可以把其中一个学校的数据解析成格式化的json文件,便于查找。可以使用python库来解析

import pprint

pprint.pprint(res.json())

也可以在网上进行线上json解析

9f0dadd09609a57662d314b86f255bfe.png

2.3、需要注意的坑

有些学校其他数据都有,包括分数、位次、批次等,就是没有专业。如西南科技大学

b5c95f739afbd93d494885daed026295.png

所以必需要判断"spname"是否在字典中,先满足这个条件再获取其他信息。同时,为了提高程序的运行效率,可以先判断它是否有数据再执行其他的条件。

for i in range(32,968,1):

url = f'https://api.eol.cn/gkcx/api/?access_token=&local_province_id=52&local_type_id=1&page=1&school_id={i}&signsafe=&size=20&uri=apidata/api/gk/score/special&year='+str(times)

time.sleep(0.1)#暂停0.1秒

res = requests.post(url=url,headers=headers)

if res.json()['md5'] !='F03C3B1E12B97478ED80E3868E2EEA94':#字典不为空再继续执行下面条件语句

for items in res.json()['data']['item']:

if('spname' in items):#存在spname才执行,如西南科技大学

if (items['spname'] == major):

print (items['name'],'\t',str(times)+"年"+str(major)+"录取最高分",items['max'],'\t',"平均分:",items['average'],'\t',"最低分:",items['min'],'\t',"最低位次:",items['min_section'],'\t',"录取批次:",items['local_batch_name'],'\n')

print (str(times)+"年全国"+str(major)+"专业录取信息查询完成!") #所有数据遍历完成后才会打印它

3、源代码汇总

import requests,time #导入库

#制作请求头

headers={

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'

}

#未来提高代码的效率,没有对输入内容进行判断

major = input("请查询输入专业:")

times = input("请输入查询年份(2014~2018):")

for i in range(32,968,1):#学校id从[32,967),省略前面部分可以节约时间

url = f'https://api.eol.cn/gkcx/api/?access_token=&local_province_id=52&local_type_id=1&page=1&school_id={i}&signsafe=&size=20&uri=apidata/api/gk/score/special&year='+str(times)

time.sleep(0.1) #暂停时间模拟人为请求

res = requests.post(url=url,headers=headers)

if res.json()['md5'] !='F03C3B1E12B97478ED80E3868E2EEA94': #字典不为空再继续执行下面条件语句,提高效率

for items in res.json()['data']['item']:

if('spname' in items): #存在spname才执行,如西南科技大学

if (items['spname'] == major):

print (items['name'],'\t',str(times)+"年"+str(major)+"录取最高分",items['max'],'\t',"平均分:",items['average'],'\t',"最低分:",items['min'],'\t',"最低位次:",items['min_section'],'\t',"录取批次:",items['local_batch_name'],'\n')

print (str(times)+"年全国"+str(major)+"专业录取信息查询完成!") #所有数据遍历完成后才会打印它

运行代码:

083f77af6738a9b544ba539f93c4729d.png

查询结果:

注意:有很多学校是大类招生,如贵州财经大学的计算机相关专业叫做计算机类,到大二后才细分专业,所有这样是搜索不到的,就只能查询填报志愿时的专业。

特别提示:

上面的代码还存在一些漏洞,有很多学校的数据是分两个页面存放的,我目前还没有找到三个页面存放的。

53d97a1c97649c898b570c9591888261.png

如果我们想刷新后再取它的数据接口,它就直接跳到了第一页,第二个接口是不可能取到的,但我们可以直接赋值为page=2。

4cf38f47f76d19500bab84e05b025f20.png

而刚才的代码就只爬取了第一个页面,上面第2个页面的信息就获取不到,现在要再遍历查询一次,时间也会相应的增加,它的关键词是专业,就算没有第二个页面,也不会乱码匹配数据的,它本身就不存在对应的专业。遍历两个页面后,就可以获取到第二个页面的值了。

740c78c6c913633824386ba30390ef80.png

爬取两页面代码汇总:

import requests,time

headers={

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'

}

major = input("请查询输入专业:")

times = input("请输入查询年份(2014~2018):")

for i in range(32,968,1):

for page in range(1,3):#增加为第一个和第二个页面

url = f'https://api.eol.cn/gkcx/api/?access_token=&local_province_id=52&local_type_id=1&page={page}&school_id={i}&signsafe=&size=20&uri=apidata/api/gk/score/special&year='+str(times)

time.sleep(0.1)

res = requests.post(url=url,headers=headers)

if res.json()['md5'] !='F03C3B1E12B97478ED80E3868E2EEA94':

for items in res.json()['data']['item']:

if('spname' in items):

if (items['spname'] == major):

print (items['name'],'\t',str(times)+"年"+str(major)+"录取最高分",items['max'],'\t',"平均分:",items['average'],'\t',"最低分:",items['min'],'\t',"最低位次:",items['min_section'],'\t',"录取批次:",items['local_batch_name'],'\n')

print (str(times)+"年全国"+str(major)+"专业录取信息查询完成!")

再次提醒: 就只能查询对应的专业,大类招生后的分类专业并不能查询!!!

数据全部来自高考数据库 ,只供学习使用,如有侵权,敬请联系 ayouleyang@qq.com

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

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

相关文章

第6篇:Flowable-Modeler详述之常见问题Table act_ge_property doesn't exist

接上一篇: 第5篇: Flowable-Modeler详述之开发环境搭建 https://blog.csdn.net/weixin_40816738/article/details/102887854 文章目录1. 问题描述2. 问题定位解决方案一解决方案二(推荐)1. 问题描述 在配置完Springboot的开发环境以后,启动的…

微服务架构之「 配置中心 」

戳蓝字“CSDN云计算”关注我们哦!作者:奎哥来源:不止思考 在微服务架构的系列文章中,前面已经通过文章《微服务架构之「服务网关 」》介绍过了在微服务中服务网关的原理和应用,今天这篇文章我们继续来聊一聊微服务中另…

助力APP尽情“撒币”!阿里云正式上线移动直播问答解决方案

摘要: 2018年伊始,互联网圈就刮起了一阵“大佬狂撒币,网友喜答题”的热潮,为了助力企业紧握风口,阿里云推出一站式移动直播问答解决方案。通过稳定高性能的计算基础设施和可扩展的直播问答系统架构,实现技术…

阿里云云数据库开了一个未来大会,谈了谈2038年的数据库趋势

摘要: “未来的某一天,量子数据库是我们改造其他星球的关键技术之一。” 1月17日,在北京举行的阿里云2018云数据库智能未来大会上,阿里云高级产品专家王义成如是说。 除了阿里云的全新一代NoSQL向NewSQL融合,NewSQL产品…

《游戏行业DDoS攻击解决方案》重磅发布

摘要: 游戏行业一直是竞争、攻击最为复杂的一个江湖。曾经多少充满激情的创业团队、玩法极具特色的游戏产品,被互联网攻击的问题扼杀在摇篮里;又有多少运营出色的游戏产品,因为遭受DDoS攻击,而一蹶不振。游戏行业在防御…

红帽:将开源进行到底

戳蓝字“CSDN云计算”关注我们哦!2019年7月9日,IBM史上最大的一笔收购案终于尘埃落定,IBM以每股现金190.0美元,完成对红帽所有已发行和流通在外普通股的收购交易,总股本价值约340亿美元。至此,红帽这家全球…

第7篇:Flowable-Modeler集成之Flowable源码编译

接上一篇: 第6篇:Flowable-Modeler详述之常见问题Table act_ge_property doesn’t exist https://blog.csdn.net/weixin_40816738/article/details/102899408 文章目录一、背景二、Flowable源码下载2.1. 参考文章:2.2. Flowable完整源码编译2…

众安每秒3.2万张保单的背后,阿里云输出了什么能力?

摘要: 当传统保险公司还在将“开门红”作为重中之重提前几个月做准备的时候,互联网保险公司关注的则是“双十一”和“双十二”。2017年双十一当日,刚刚在香港上市的众安保险的保单量突破3亿,比2014年增长超过200%。 点此查看原文&…

第8篇:Flowable-Modeler集成之Flowable-modeler源码编译

接上一篇: 第7篇:Flowable-Modeler集成之Flowable源码编译 https://blog.csdn.net/weixin_40816738/article/details/102899693 文章目录一、背景二、源码下载三、思路分析与目标3.1. 分析modeler3.2. Modeler模块编译,启动3.2.1. POM修改3.2…

iOS unrecognized selector crash 自修复技术实现与原理解析

摘要: 在开发中 unrecognized selector sent to instance XXXXX 是非常常见的 crash 类型。这篇博文主要介绍如何在客户端自修复该问题,并进行原理解析。 作者介绍:阿里云-移动云-大前端团队。 点此查看原文:http://click.aliyun.…

阿里测试环境运维及研发效率提升之道

摘要: 生产环境最关注的就是稳定,测试环境更关注的是研发效率,如何从一行代码最快的保证质量发到线上去,这个是我们测试环境最关注的。在全球运维大会上,阿里巴巴研发效能事业部运维中台技术专家——刘湘疆&#xff08…

首批8款5G手机获3C认证:华为占4款;IBM获AT&T“几十亿美元”云计算合同;马库斯:未来薪酬将以Libra发放...

戳蓝字“CSDN云计算”关注我们哦!嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

第9篇:Flowable-Modeler集成以及集成代码下载

接上一篇: 第8篇:Flowable-Modeler集成之Flowable-modeler源码编译 https://blog.csdn.net/weixin_40816738/article/details/102901026 文章目录一、背景二、代码修改,去除认证2.1. 修改拦截请求2.2. 修改用户查询信息2.3. 账号查询请求修改…

如何保障研发质量不踩坑?阿里技术专家教你几招

摘要: 面对自动化测试成本高、测试不稳定、测试无法严控发布质量等常见研发过程中的测试问题时,企业如何避免?如何保障研发质量?阿里巴巴研发效能事业部-研发协同平台高级技术专家李帅(花名焦霸)&#xff0…

保障了罗振宇跨年演讲的PTS铂金版正式上线,产品体验全新升级

摘要: 虽然2018年的跨年已经过去,但是对于今年各种新颖的跨年形式,不少人仍然意犹未尽。比如,罗振宇在深圳卫视和优酷直播的跨年演讲《时间的朋友》。据悉,当天现场参与人数近万,观看直播的观众多达百万。而…

第10篇:Flowable-BPMN操作流程部署、启动

接上一篇: 第9篇:Flowable-Modeler集成以及集成代码下载 https://blog.csdn.net/weixin_40816738/article/details/102901208 文章目录一、背景二、方案设计2.1. 流程部署2.2. 模型的转换2.3. 启动流程三、BPMN业务流程文件3.1. 启动flowable-idm3.2. 启…

那些年我们用过神级的代码注释

戳蓝字“CSDN云计算”关注我们哦!来自:Blankj | 责编:乐乐链接:http://github.com/Blankj/awesome-comment正文 写在前面的话:一时兴起就收集了以下神注释,希望能为广大ITer带来快乐,缓解你们工…

AliOS Things 组件系统(uCube)

摘要: AliOS Things 是阿里巴巴提供的物联网操作系统,可以在不同的设备上运行不同的功能,甚至相同的设备运行不同的功能,AliOS Things 基于组件管理: 1、 组件功能单一,复用组件提供的功能,比如…

第11篇:Flowable-BPMN部署常见问题没有对ACT_RE_PROCDEF表进行插入操作

上一篇: 第10篇:Flowable-BPMN操作流程部署、启动 https://blog.csdn.net/weixin_40816738/article/details/102902348 文章目录一、问题描述二、问题定位三、解决方案四、验证结果一、问题描述 流程在部署的时候调用服务RepositoryService,…

AliOS Things lorawanapp应用介绍

摘要: 文本旨介绍AliOS Things的lorawanapp的示例,完成一个LoRaWAN网络的构建和数据传输,并通过该示例让大家对AliOS Things有一个初步的了解。 点此查看原文:http://click.aliyun.com/m/40591/ AliOS Things 是 AliOS 家族旗下的…