python爬取高考各高校分数线_Python 爬取高校历年分数线
最近一周一直在帮家里小弟看高考志愿,所以更新的没那么频繁了,请大家见谅。
在看各高校的往年分数时,忍不住手痒,想着能不能给它爬下来?哈哈,说干就干!
1 流程分析
之前无意中在这个网站发现有各个高校的历年录取分数线:https://gkcx.eol.cn。
我们的目标是用 Python 将下面页面的数据导出到 Excel:
这个页面的 URL 是:https://gkcx.eol.cn/schoolhtm…,显然是需要一个 school_id 拼接而成的,那么如何获取这个 school_id 呢?
除非想办法爬取到所有院校的 school_id,这里我想着是从上面图中的搜索框进入:
这样,整体的业务流程我们就理清楚了:
先调用搜索的 URL 获取到高校的 school_id,拼接到高校的详情访问地址
访问详情地址,抓取目标数据
处理目标数据,存储到 Excel 中
2 获取 school_id
按下 F12,可以看出搜索调用的 URL 是:https://gkcx.eol.cn/soudaxue/queryschool.html?&keyWord1=南京邮电大学,但是我们发现该请求的 response 里并没有高校列表,所以猜测这里是有二次数据请求获取到高校的列表,然后解析显示到页面的。
顺着请求流,我们看到了这么一个请求:
并且它的 response 刚好是一个包含高校信息的 json,到这里应该还是顺利的,我们只要从这个 json 里解析出我们想要的东西,然后继续后面的步骤就可以了。要注意该请求的 Referer。
但是在解析这个 json 时会遇到一个小问题,返回的数据格式是这样的:
({
"totalRecord": {"num": "2"},
"school": [
{
"schoolid": "160",
"schoolname": "南京邮电大学",
...
});
它是被 (); 包围着的,不是一个合法的 json 数据,这里需要对其进行处理后才能解析 json:
# 返回数据包含 ();,需要特殊处理
text = ((response.text).split(');',1)[0]).split('(',1)[1]
j = json.loads(text)
3 分数线获取
学校的详情页面是:https://gkcx.eol.cn/schoolhtm…,同样的套路,在点击后 response 里并没有分数线数据,我想也是二次请求吧,果然在请求流里找到了这个:
这里的两个请求刚好将高校的每年分数线和各专业的分数线以 XML 的格式返回,Very Good!
下面要做的就是 XML 解析啦。
4 XML 解析
这里我们使用 xml.etree.ElementTree 来解析 XML:
2017
软件工程(嵌入式培养)
369
366
364
一批
理科
由于数据比较规整,解析也很简单:
areapionts = ET.fromstring(response.text)
for areapiont in areapionts:
print(areapiont.find('year').text)
print(areapiont.find('specialname').text)
5 Excel 写入
Excel 的写入需要借助于 openpyxl 模块。
openpyxl 简单使用示例
>>> import openpyxl
>>> wb = openpyxl.Workbook()
# 初始时会生成一个 sheet 页
>>> wb.sheetnames
['Sheet']
# 创建 sheet 页
>>> wb.create_sheet(index=0,title='First')
# 获取所有 sheet 页
>>> wb.sheetnames
['First', 'Sheet']
# 删除 sheet 页
>>> wb.remove(wb['Sheet'])
>>> wb.sheetnames
['First']
>>> sheet = wb['First']
# 设置单元格
>>> sheet['A1'] = '省份'
>>> sheet['B1'] = '学校'
# 设置指定的单元格
>>> sheet.cell(1,3).value='test'
>>> wb.save('test.xlsx')
XML 解析写入 Excel
def gen_excel(school,xml,wb):
sheet = wb.create_sheet(title='各专业历年录取分数线')
sheet.column_dimensions['B'].width = 40
sheet['A1'] = '年份'
sheet['B1'] = '专业'
sheet['C1'] = '最高分'
sheet['D1'] = '平均分'
sheet['E1'] = '最低分'
sheet['F1'] = '批次'
sheet['G1'] = '录取批次'
areapionts = ET.fromstring(xml)
column = 1
for areapiont in areapionts:
column += 1
sheet.cell(column,1).value = areapiont.find('year').text
sheet.cell(column,2).value = areapiont.find('specialname').text
sheet.cell(column,3).value = areapiont.find('maxfs').text
sheet.cell(column,4).value = areapiont.find('varfs').text
sheet.cell(column,5).value = areapiont.find('minfs').text
sheet.cell(column,6).value = areapiont.find('pc').text
sheet.cell(column,7).value = areapiont.find('stype').text
wb.save('{}.xlsx'.format(school['schoolname']))
执行效果
$ python gkcx.py
Please the school name:南京邮电大学
共检索到 2 个高校:['南京邮电大学', '南京邮电大学通达学院']
数据获取完成,已下载到脚本目录
结果看着还可以,但是还是有问题的,因为各省的分数线肯定是不一样的,这里默认检索出的是学校所在省的分数线,因此若要获取在其他省的分数线,还需要进一步处理,有兴趣的同学不妨动手试一下。后台回复「高考」可以获取源码。
如果觉得有用,欢迎关注我的微信,一起学习,共同进步,不定期推出赠书活动~
python爬取高考各高校分数线_Python 爬取高校历年分数线相关推荐
- python爬取淘宝商品信息_python爬取淘宝商品信息并加入购物车
先说一下最终要达到的效果:谷歌浏览器登陆淘宝后,运行python项目,将任意任意淘宝商品的链接传入,并手动选择商品属性,输出其价格与剩余库存,然后选择购买数,自动加入购物车. 在开始爬取淘宝链接之前, ...
- python可以爬取的内容有什么_Python爬取视频(其实是一篇福利)过程解析 Python爬虫可以爬取什么...
如何用python爬取视频网站的数据 如何用python爬取js渲染加载的视频文件不是每个人都有资格说喜欢,也不是每个人都能选择伴你一生! 有哪位大神指导下,有些视频网站上的视频文件是通过 js 加载 ...
- python爬取新闻并归数据库_Python爬取数据并写入MySQL数据库操作示例
Python爬取数据并写入MySQL数据库的实例 首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据. 按 F12 或 ctrl+u 审查元 ...
- python爬取网页书籍名称代码_python爬取亚马逊书籍信息代码分享
我有个需求就是抓取一些简单的书籍信息存储到mysql数据库,例如,封面图片,书名,类型,作者,简历,出版社,语种. 我比较之后,决定在亚马逊来实现我的需求. 我分析网站后发现,亚马逊有个高级搜索的功能 ...
- python爬取app中的音频_Python爬取抖音APP,只需要十行代码
环境说明 环境: python 3.7.1 centos 7.4 pip 10.0.1 部署 [root@localhost ~]# python3.7 --version Python 3.7.1 ...
- python爬取数据生成词云_Python 爬取生成中文词云以爬取知乎用户属性为例
代码如下: # -*- coding:utf-8 -*- import requests import pandas as pd import time import matplotlib.pyplo ...
- python爬取app中的音频_Python爬取喜马拉雅音频数据详解
码农公社 210.net.cn 210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python爬取喜马拉雅音频数据详解 一.项目目标 爬取喜马拉雅音频数据 受害 ...
- python爬取链家租房信息_Python爬取链家网上海市租房信息
使用Python进行上海市租房信息爬取,通过requests + Beautifulsoup对网页内容进行抓取和数据提取. import requests from bs4 import Beauti ...
- python爬取百度贴吧图片库_python爬取百度贴吧的图片2
今天看了一下beautifulsoup库的用法,把昨天的python爬取百度贴吧的图片1的代码更新成使用beautifulsoup库的函数来实现.用的还是不太熟练,但是感觉比正则表达式写起来容易了一些 ...
最新文章
- golang显式类型初始化
- PAT甲级1056 Mice and Rice:[C++题解]模拟、排名
- mysql5.17免安装教程_详细介绍MySql5.7.17免安装配置教程的示例代码
- 《一天聊一个设计模式》 策略
- redis源码阅读--hashTable
- 如何为Python日志输出着色?
- 使用WMI编程获取主机硬件信息(CPU_ID,硬盘、主板、BIOS序列号,Mac地址)
- bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘(凸包)
- [BZOJ2038]小Z的袜子(莫队算法)
- JavaScript中实现深浅拷贝
- Variational Mode Decomposition(变分模态分解),介绍,算法流程,作用,优缺点
- 论文笔记:3DMM(ACM1999)
- FPGA之SDRAM控制器设计(四)
- mapreduce 和hive 的区别
- Android 控制音频的音量大小
- mysql 事务一直running_事务一直running?记录一次事务异常导致的下单阻塞
- [软件设计] 控制反转(Inversion of Control)随想
- HiFT: Hierarchical Feature Transformer for Aerial Tracking分层特征Transformer的无人机跟踪
- 抖音seo优化怎么做?抖音seo流程详解
- 微信小程序-选择时间(一周的某一时刻)
热门文章
- Nature综述:真菌的多样性:真菌的高通量测序及鉴定
- 2020滑铁卢大学计算机科学学费,加拿大大学国际生学费上涨 滑铁卢大学学费上涨62%...
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均、例如,计算某公司的多个店铺每N天(5天)的滚动销售额指数权重移动(滚动)平均
- R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值、值标签定位在geom_col堆叠的条形图中的每个条形段的中间
- R语言数值向上近似函数(round, ceiling, floor, trunc, signif)实战
- AR模型、MA(Moving Average)模型、ARMA模型、时间序列的定阶、ARIMA、SARIMAX
- Linux系统介绍 文本查看、操作、统计命令(head/tail cat/tac less/more • wc sort uniq • cut paste)
- t-SNE algorithm(t-分布邻域嵌入算法)
- TensorFlow基础12-(keras.Sequential模型以及使用Sequential模型 实现手写数字识别)
- stm32使用flymcu烧写程序