大家好,我是小一

一个城市的历史底蕴,不光可以从经济、文化和人文景点,还可以从高校的数量可以看出来。所以,今天就来试试如何爬取全国高校的分布数据。

以下文章比较适合初学者,老读者请酌情加速阅读。

今天要爬取的网站是:中国教育在线,对应的网址是:https://gkcx.eol.cn/school/search

因为对应的是位置点,所以最主要的应该是经纬度点坐标数据。

但是在该网站中无法获取到高校的经纬度数据,所以在文末会教你利用地址解析的方式获取到经纬度坐标。

以下是正文:

爬虫流程

打开对应网址后,F12 打开开发者工具,切换到 Network 选项卡下的 XHR

通过在网页中点击 上一页下一页 按钮可以发现有如下的请求:

多次点击后可以发现对应的只是请求参数 page 在发生变化

对应每一页的请求参数 page 对应的该页在整个数据集中所处的位置

而总的数据集个数在每个请求的 response 中可以获取到

从而通过 总个数/每页个数=页面数 确定总的请求次数

在每次请求的响应中可以看到返回的数据有很多,包括:高校地址、所在城市、地区、直属机构、类别、是否双一流 以及对应的浏览次数等数据

综上,前期的数据爬取中,总体流程如下:

  • 获取总记录数,计算请求次数

  • 遍历请求次数,构造每一次请求的 url

  • 解析并获取数据

最后,通过百度地图反向解析高校的经纬度数据,这个在文末会介绍到

爬虫实现

基于上面的爬虫流程,依次进行爬虫的代码实现

首先是获取到总记录数,

url = 'url'
res = requests.post(url, headers={'User-Agent': get_ua()})
data = json.loads(res.text)# 解析数据
if data["message"] == '成功':size = data["data"]["numFound"]

由于每次请求返回的数据是 JSON 格式,通过上述方式可以直接获取到总记录数

从而可以很方便的计算出总请求次数:

# 计算请求次数
page_cnt = int(size/page_size) if size%page_size==0 else int(size/page_size)+1
print('一共{0}页数据'.format(page_cnt))

其次, 遍历请求次数,构造每一次的请求 url

其实主要是更新下标 index

for index in range(1, page_cnt+1):print('正在爬取第 {0}/{1} 页数据'.format(index, page_cnt))url = 'https://api.eol.cn/gkcx/api/?access_token=&admissions=&central=&department=&dual_class=&f211=&f985=&is_doublehigh=&is_dual_class=&keyword=&nature=&page={0}&province_id=&ranktype=&request_type=1&school_type=&signsafe=&size=20&sort=view_total&top_school_id=[2941]&type=&uri=apidata/api/gk/school/lists' \.format(index)res = requests.post(url, headers={'User-Agent': get_ua()})data = json.loads(res.text)

最后是解析每一页的数据

由于数据是 JSON 格式,可以很方便的通过 DataFrame 进行转换

# 解析数据
if data["message"] == '成功':df_data = pd.DataFrame(data["data"]["item"])df_result = df_result.append(df_data)

最后对整体数据进行保存即可。

地址解析,匹配经纬度

地址解析主要是通过百度开发者平台,对高校的地址进行解析

平台提供的接口是这样的:

对应的,我们将每个 高校的地址 作为 query 参数,将 省份+城市 作为 region 参数,设置 tag 为 高等院校,构造访问 url

相应的代码如下:

df_data = pd.read_csv(filepath, encoding='gbk')
for row_index, data_row in df_data.iterrows():region = data_row['province_name']+data_row['city_name']query = data_row['name']url = 'http://api.map.baidu.com/place/v2/search?query={0}&tag={1}&region={2}&output=json&ak={3}'.format(query, "高等院校", region,  '你的key')

最后是对每次的请求进行解析,获取到百度地图返回的经纬度数据

思路比较简单,相应代码如下:

res = requests.get(url, headers={'User-Agent': get_ua()})
data = json.loads(res.text)
if len(data["results"]) > 0:df_data = pd.DataFrame(data["results"])df_data['lat'] = df_data['location'].apply(lambda x: x['lat'])df_data['lng'] = df_data['location'].apply(lambda x: x['lng'])# 返回数据bd_lng = df_data.loc[0, "lng"]bd_lat = df_data.loc[0, "lat"]

个人开发者在百度开放平台每天有 3w 次地点检索的免费配额,在使用的时候可以注意下

本次的高校数据集大概不到 3000 条,建议在运行之前可以先写好测试 demo

最终数据及效果

爬取到的高校数据共 2827 条,每个数据 46 个字段

部分数据截图如下:

将高校经纬度打在地图上,分布是这样的:

这份数据和目前教育部公布的数据还是有一些小小的出入,但是在可容忍范围之内,所以误差可以暂时忽略。

ok,数据已经确认了,接下来就是如何分析的问题了,下节分析部分会详细介绍。

往期爆文

利用Python实现PDF文档批量加水印,轻松实现!

一季度基金持仓分析,下半年重点关注这些机会!

excel 绘制闪到发光的三维地图真的很简单!

全国 40城 5000+ 地铁站点数据分析实战!

6000+文字的数据探索分析实战教程,推荐练手!

扫码加好友,加入海归Python编程和人工智能群

期待你的 连!我们下节见

轻松实现全国高校地理位置数据爬取(文末附源码和数据集)相关推荐

  1. 轻松实现全国高校地理位置数据爬取

    一个城市的历史底蕴,不光可以从经济.文化和人文景点,还可以从高校的数量可以看出来.所以,今天就来试试如何爬取全国高校的分布数据. 天要爬取的网站是:中国教育在线,对应的网址是:https://gkcx ...

  2. bilibili助手C2C服务器,Bilibili (B站)200万用户数据爬取与分析(附源码)

    原标题:Bilibili (B站)200万用户数据爬取与分析(附源码) 数据挖掘入门与实战 公众号: datadw 该爬虫仅供学习使用 B站用户爬虫 B站视频爬虫 B站弹幕下载器 关注并回复公众号da ...

  3. b站学python_Python爬虫学习教程 bilibili网站视频爬取!【附源码】

    python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...

  4. python3GUI--微博图片爬取工具(附源码)

    文章目录 一.准备工作 二.预览 1.启动 2.运行中 3.结果 三.设计流程 1.总体设计 2.详细设计 四.源代码 五.总结说明 有小半个月没有发博客了,因为一直在研究python的GUI,买了一 ...

  5. 【Python爬虫项目】新发地蔬菜水果等食品价格爬取(详细附源码)

    新发地获取蔬菜水果等食品价格 爬取信息具体如下: 1.食品名称 2.最低价 3.最高价 4.平均价 5.规格 6.产地 7.单位 8.发布日期 1.检查网页源码 通过检查源码可以看出数据并不在网页源码 ...

  6. Python爬虫学习教程 bilibili网站视频爬取!【附源码】

    Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...

  7. 利用Python爬取小说(附源码)

    用30行代码爬取某小说网站上的一篇小说 一.导入模块 import requests from lxml import etree import time 二.获取网站的响应信息,并以text打印 u ...

  8. 爬虫实战—轻松爬取全国40城5000+地铁站点数据!附源码和数据集

    原文链接:小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集 大家好,我是小一 上一篇文章讲了一个失败的数据分析案例,导致失败最最主要的原因就两个字:数据 有时候,爬虫爬到的数据是很珍贵 ...

  9. 全国历史天气查询/历史天气预报查询——全国各月份数据爬取

    全国历史天气查询/历史天气预报查询--全国各月份数据爬取 效果 图1 目标爬取数据 图2 最终实验效果 实验效果:最终可将官网已有的数据进行爬取整理,共363个城市,从2011年1月--至今 数据已上 ...

最新文章

  1. 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码
  2. 酒店中计算机信息应用的重要性,浅析计算机在酒店管理中所体现的应用价值
  3. Android_Kotlin原生开发_认识Kotlin_了解Kotlin和JVM虚拟机关系_认识Kotlin的重要性_更强大的跨平台特性_不需要JVM虚拟机也可跨平台---Kotlin工作笔记001
  4. mysql delete 数据之后 .MYD文件大小没有发生变化
  5. WWDC20中iOS的改变
  6. 项目引用android-support-v7-appcompat,如何使用android-support-v7-appcompat
  7. 程序员考试范围(考试大纲)
  8. linux中MIB与MB单位的区别
  9. 【设计模式】设计原则:CARP 合成复用原则
  10. Lab3-实现计划项app辅助类实现
  11. java万年历闹钟节气,闹钟 提醒 万年历 用酷石英钟搞定
  12. win10 损坏的映像 0xc000012f
  13. C语言 学生成绩统计
  14. 4. 寻找两个正序数组的中位数
  15. n719 rom 卡刷 android 4.3,三星 N719 官方 4.3 精简 纯净 刷机包 ROM
  16. 一位博士论文的致谢部分
  17. 中国牙科显微镜领导品牌速迈医学携手冠骋信息,开启数字化新征程!
  18. 【数学建模】拟合算法+Matlab实现
  19. 美观又实用,纯 CSS 悬浮菜单让网站更加出色
  20. 无线通信原理学习博客

热门文章

  1. 生活记录--考研日记(1)
  2. 小奇遐想 树状数组实现+容斥思想
  3. yii2 shi用modal弹窗 select2搜索框无法使用
  4. Mathematica .nb程序运行不下去的原因
  5. 前端进阶-手写Vue2.0源码(三)|技术点评
  6. 华为Python面试题
  7. PostgreSQL 空间处理函数
  8. (转)Hibernate关联映射——一对多(多对一)
  9. (转)淘淘商城系列——zookeeper单机版安装
  10. 数据科学和人工智能技术笔记 二十一、统计学