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

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

数据来源: 高考数据库

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

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

实现思路:

  1. 获取高考数据库的数据接口
  2. 查询数据

技术实现讲解

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("请查询输入专业:")
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
### 使用Python编写爬虫抓取高考录取分数数据 要使用Python编写爬虫抓取高考录取分数数据,可以采用`requests`库进行HTTP请求,结合`BeautifulSoup`或`lxml`库解析HTML内容,并利用`pandas`库对数据进行存储和分析。以下是一个完整的解决方案: #### 1. 环境准备 首先需要安装必要的库: ```bash pip install requests beautifulsoup4 lxml pandas ``` #### 2. 爬虫实现代码 以下是一个示例代码,展示如何抓取高考录取分数数据: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 设置目标URL(假设为一个包含高考录取分数的网站) url = "https://example.com/gaokao_scores" # 替换为实际的目标网址 # 发送HTTP请求 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get(url, headers=headers) # 检查请求是否成功 if response.status_code == 200: soup = BeautifulSoup(response.text, 'lxml') # 使用lxml解析HTML # 提取表格数据(假设数据以表格形式展示) table = soup.find('table') # 找到表格元素 rows = table.find_all('tr') # 获取所有行 data = [] for row in rows: cols = row.find_all('td') # 获取每行的所有列 cols = [col.text.strip() for col in cols] # 提取文本并去除多余空格 if cols: # 如果有数据,则添加到列表中 data.append(cols) # 将数据转换为DataFrame df = pd.DataFrame(data, columns=['大学名称', '省份', '最低分', '最高分', '平均分']) # 根据实际情况调整列名 print(df.head()) # 打印前几行数据 # 保存为CSV文件 df.to_csv('gaokao_scores.csv', index=False, encoding='utf-8-sig') else: print(f"请求失败,状态码:{response.status_code}") ``` #### 3. 数据处理与可视化 在获取数据后,可以使用`pandas`和`matplotlib`进行数据分析和可视化: ```python import matplotlib.pyplot as plt # 加载数据 df = pd.read_csv('gaokao_scores.csv') # 数据清洗(如去除缺失值、异常值等) df.dropna(inplace=True) # 统计各省最低分情况 province_min_scores = df.groupby('省份')['最低分'].min().sort_values(ascending=False) print(province_min_scores) # 可视化 plt.figure(figsize=(10, 6)) province_min_scores.plot(kind='bar', color='skyblue') plt.title('各省高考最低分统计') plt.xlabel('省份') plt.ylabel('最低分') plt.xticks(rotation=45) plt.tight_layout() plt.show() ``` --- ### 注意事项 1. 在爬取数据时,需确保遵守目标网站的`robots.txt`协议[^2]。 2. 如果目标网站使用了动态加载技术(如JavaScript渲染),可以考虑使用`Selenium`或`Playwright`来模拟浏览器行为[^3]。 3. 爬取频率不宜过高,以免对目标服务器造成负担。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值