python爬⾍查询全国⼤学专业的录取情况gzip压缩容量上限
估计很多⼈在填报⾼考⾃愿的时候都会难以选择学校,有⾃⼰⼼仪的专业,但是在⽹上搜了半天也不能确定填哪⼀所学校。如果填了录取分数线低的,那将会浪费很多分数,表⽰有点遗憾。如果没有录取上,那就更遗憾了… 在我们想根据专业来选择学校的时候,往往会有很多学校⽆法被⾃⼰根据专业搜索到,但⼜很适合⾃⼰,全国那么多学校,⼤好的机会就只能完美错过了。所以,该怎么把全国所有带有该专业的学校和往年的录取分数线⼀起出来,并进⾏录取分数对⽐呢?
数据来源:
操作环境: win10, python3.6, jupyter notebook,⾕歌浏览器(都不是必选项)
获取内容: 学校、往年的理科录取情况(最⾼分,平均分,最低分,最低位次, 录取批次)
实现思路:
h5制作网站秀米1. 获取⾼考数据库的数据接⼝
2. 查询数据
技术实现讲解
linux常用命令整理
1、查⾼考数据库的数据接⼝
1.1、获取某校的⾼考录取情况
(1)直接搜索学校,在《XX⼤学⾼考分数线_招⽣信息_中国教育在线》中查看录取分数线,到专业分数线,(也可以在官⽹中搜索学校),右击检查。
(2)粘贴刚才复制的链接到浏览器中看看是否存在我们需要的数据
1.2、分析其他的数据接⼝
我们需要的数据都在其中,但这只是⼀个学校的,我们要怎么查看其他学校的呢?不妨多对⽐⼀下其他学校的数据接⼝吧
通过对⽐,发现每个学校链接的id值都不同,如“贵州财经⼤学”的school_id=520,只需要分别传值给这个链接,就可以获取该系统所有学校的路径了,除了没有填写录取分数线的学校。除此之外,上⾯还有时间,从⽹页中可以发现它也对应了每个学校的时间,就可以根据它来查询年度。
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("请查询输⼊专业:")springboot依赖注入的三种方式
times =input("请输⼊查询年份(2014~2018):")numpy库中出数组的唯一值
for i in range(32,968,1):#id 从32到967
url = f'l/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'
python请求并解析json数据}
for i in range(1,1000):#预设学校id有999个,[ 1,1000)
url = f'l/gkcx/api/?access_token=&local_province_id=52&local_type_id=1&page=1&s
chool_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'])
运⾏结果:
学校id1不存在
学校id2不存在
学校id3不存在
.
..............#省略部分输出
学校id30不存在
学校id31不存在
EAA4D9DA22841248D9826B8CF6641F95
B7FD4BC855287B5788366520335B54B4
4653CF0302C731E679E5D1F765A20FE6
...............#省略部分输出
学校id964不存在
学校id965不存在
8CCBA1E84159C24BA81B3E647198F7FF
98062D0DAFF19F39CA094E714645DB6D
学校id968不存在
学校id969不存在
...............#省略后⾯输出
通过这样查测试,我们就能确定学校id的长度了,同时这样也可以省下前⾯id的查时间。
2.2、提取数据
我们请求到的数据是字典型,可以把其中⼀个学校的数据解析成格式化的json⽂件,便于查。可以使⽤python库来解析
import pprint
pprint.pprint(res.json())
也可以在⽹上进⾏线上json解析
2.3、需要注意的坑
有些学校其他数据都有,包括分数、位次、批次等,就是没有专业。如西南科技⼤学
所以必需要判断"spname"是否在字典中,先满⾜这个条件再获取其他信息。同时,为了提⾼程序的运⾏效率,可以先判断它是否有数据再执⾏其他的条件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论