最近一周一直在帮家里小弟看高考志愿,所以更新的没那么频繁了,请大家见谅。

在看各高校的往年分数时,忍不住手痒,想着能不能给它爬下来?哈哈,说干就干!

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 爬取高校历年分数线相关推荐

  1. python爬取淘宝商品信息_python爬取淘宝商品信息并加入购物车

    先说一下最终要达到的效果:谷歌浏览器登陆淘宝后,运行python项目,将任意任意淘宝商品的链接传入,并手动选择商品属性,输出其价格与剩余库存,然后选择购买数,自动加入购物车. 在开始爬取淘宝链接之前, ...

  2. python可以爬取的内容有什么_Python爬取视频(其实是一篇福利)过程解析 Python爬虫可以爬取什么...

    如何用python爬取视频网站的数据 如何用python爬取js渲染加载的视频文件不是每个人都有资格说喜欢,也不是每个人都能选择伴你一生! 有哪位大神指导下,有些视频网站上的视频文件是通过 js 加载 ...

  3. python爬取新闻并归数据库_Python爬取数据并写入MySQL数据库操作示例

    Python爬取数据并写入MySQL数据库的实例 首先我们来爬取 http://html-color-codes.info/color-names/ 的一些数据. 按 F12 或 ctrl+u 审查元 ...

  4. python爬取网页书籍名称代码_python爬取亚马逊书籍信息代码分享

    我有个需求就是抓取一些简单的书籍信息存储到mysql数据库,例如,封面图片,书名,类型,作者,简历,出版社,语种. 我比较之后,决定在亚马逊来实现我的需求. 我分析网站后发现,亚马逊有个高级搜索的功能 ...

  5. python爬取app中的音频_Python爬取抖音APP,只需要十行代码

    环境说明 环境: python 3.7.1 centos 7.4 pip 10.0.1 部署 [root@localhost ~]# python3.7 --version Python 3.7.1 ...

  6. python爬取数据生成词云_Python 爬取生成中文词云以爬取知乎用户属性为例

    代码如下: # -*- coding:utf-8 -*- import requests import pandas as pd import time import matplotlib.pyplo ...

  7. python爬取app中的音频_Python爬取喜马拉雅音频数据详解

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python爬取喜马拉雅音频数据详解 一.项目目标 爬取喜马拉雅音频数据 受害 ...

  8. python爬取链家租房信息_Python爬取链家网上海市租房信息

    使用Python进行上海市租房信息爬取,通过requests + Beautifulsoup对网页内容进行抓取和数据提取. import requests from bs4 import Beauti ...

  9. python爬取百度贴吧图片库_python爬取百度贴吧的图片2

    今天看了一下beautifulsoup库的用法,把昨天的python爬取百度贴吧的图片1的代码更新成使用beautifulsoup库的函数来实现.用的还是不太熟练,但是感觉比正则表达式写起来容易了一些 ...

最新文章

  1. golang显式类型初始化
  2. PAT甲级1056 Mice and Rice:[C++题解]模拟、排名
  3. mysql5.17免安装教程_详细介绍MySql5.7.17免安装配置教程的示例代码
  4. 《一天聊一个设计模式》 策略
  5. redis源码阅读--hashTable
  6. 如何为Python日志输出着色?
  7. 使用WMI编程获取主机硬件信息(CPU_ID,硬盘、主板、BIOS序列号,Mac地址)
  8. bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘(凸包)
  9. [BZOJ2038]小Z的袜子(莫队算法)
  10. JavaScript中实现深浅拷贝
  11. Variational Mode Decomposition(变分模态分解),介绍,算法流程,作用,优缺点
  12. 论文笔记:3DMM(ACM1999)
  13. FPGA之SDRAM控制器设计(四)
  14. mapreduce 和hive 的区别
  15. Android 控制音频的音量大小
  16. mysql 事务一直running_事务一直running?记录一次事务异常导致的下单阻塞
  17. [软件设计] 控制反转(Inversion of Control)随想
  18. HiFT: Hierarchical Feature Transformer for Aerial Tracking分层特征Transformer的无人机跟踪
  19. 抖音seo优化怎么做?抖音seo流程详解
  20. 微信小程序-选择时间(一周的某一时刻)

热门文章

  1. Nature综述:真菌的多样性:真菌的高通量测序及鉴定
  2. 2020滑铁卢大学计算机科学学费,加拿大大学国际生学费上涨 滑铁卢大学学费上涨62%...
  3. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的指数权重移动(滚动)平均、例如,计算某公司的多个店铺每N天(5天)的滚动销售额指数权重移动(滚动)平均
  4. R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值、值标签定位在geom_col堆叠的条形图中的每个条形段的中间
  5. R语言数值向上近似函数(round, ceiling, floor, trunc, signif)实战
  6. AR模型、MA(Moving Average)模型、ARMA模型、时间序列的定阶、ARIMA、SARIMAX
  7. Linux系统介绍 文本查看、操作、统计命令(head/tail cat/tac less/more • wc sort uniq • cut paste)
  8. t-SNE algorithm(t-分布邻域嵌入算法)
  9. TensorFlow基础12-(keras.Sequential模型以及使用Sequential模型 实现手写数字识别)
  10. stm32使用flymcu烧写程序