轻松实现全国高校地理位置数据爬取(文末附源码和数据集)
大家好,我是小一
一个城市的历史底蕴,不光可以从经济、文化和人文景点,还可以从高校的数量可以看出来。所以,今天就来试试如何爬取全国高校的分布数据。
以下文章比较适合初学者,老读者请酌情加速阅读。
今天要爬取的网站是:中国教育在线,对应的网址是: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=¢ral=&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}®ion={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编程和人工智能群
期待你的 三连!我们下节见
轻松实现全国高校地理位置数据爬取(文末附源码和数据集)相关推荐
- 轻松实现全国高校地理位置数据爬取
一个城市的历史底蕴,不光可以从经济.文化和人文景点,还可以从高校的数量可以看出来.所以,今天就来试试如何爬取全国高校的分布数据. 天要爬取的网站是:中国教育在线,对应的网址是:https://gkcx ...
- bilibili助手C2C服务器,Bilibili (B站)200万用户数据爬取与分析(附源码)
原标题:Bilibili (B站)200万用户数据爬取与分析(附源码) 数据挖掘入门与实战 公众号: datadw 该爬虫仅供学习使用 B站用户爬虫 B站视频爬虫 B站弹幕下载器 关注并回复公众号da ...
- b站学python_Python爬虫学习教程 bilibili网站视频爬取!【附源码】
python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...
- python3GUI--微博图片爬取工具(附源码)
文章目录 一.准备工作 二.预览 1.启动 2.运行中 3.结果 三.设计流程 1.总体设计 2.详细设计 四.源代码 五.总结说明 有小半个月没有发博客了,因为一直在研究python的GUI,买了一 ...
- 【Python爬虫项目】新发地蔬菜水果等食品价格爬取(详细附源码)
新发地获取蔬菜水果等食品价格 爬取信息具体如下: 1.食品名称 2.最低价 3.最高价 4.平均价 5.规格 6.产地 7.单位 8.发布日期 1.检查网页源码 通过检查源码可以看出数据并不在网页源码 ...
- Python爬虫学习教程 bilibili网站视频爬取!【附源码】
Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...
- 利用Python爬取小说(附源码)
用30行代码爬取某小说网站上的一篇小说 一.导入模块 import requests from lxml import etree import time 二.获取网站的响应信息,并以text打印 u ...
- 爬虫实战—轻松爬取全国40城5000+地铁站点数据!附源码和数据集
原文链接:小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集 大家好,我是小一 上一篇文章讲了一个失败的数据分析案例,导致失败最最主要的原因就两个字:数据 有时候,爬虫爬到的数据是很珍贵 ...
- 全国历史天气查询/历史天气预报查询——全国各月份数据爬取
全国历史天气查询/历史天气预报查询--全国各月份数据爬取 效果 图1 目标爬取数据 图2 最终实验效果 实验效果:最终可将官网已有的数据进行爬取整理,共363个城市,从2011年1月--至今 数据已上 ...
最新文章
- 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码
- 酒店中计算机信息应用的重要性,浅析计算机在酒店管理中所体现的应用价值
- Android_Kotlin原生开发_认识Kotlin_了解Kotlin和JVM虚拟机关系_认识Kotlin的重要性_更强大的跨平台特性_不需要JVM虚拟机也可跨平台---Kotlin工作笔记001
- mysql delete 数据之后 .MYD文件大小没有发生变化
- WWDC20中iOS的改变
- 项目引用android-support-v7-appcompat,如何使用android-support-v7-appcompat
- 程序员考试范围(考试大纲)
- linux中MIB与MB单位的区别
- 【设计模式】设计原则:CARP 合成复用原则
- Lab3-实现计划项app辅助类实现
- java万年历闹钟节气,闹钟 提醒 万年历 用酷石英钟搞定
- win10 损坏的映像 0xc000012f
- C语言 学生成绩统计
- 4. 寻找两个正序数组的中位数
- n719 rom 卡刷 android 4.3,三星 N719 官方 4.3 精简 纯净 刷机包 ROM
- 一位博士论文的致谢部分
- 中国牙科显微镜领导品牌速迈医学携手冠骋信息,开启数字化新征程!
- 【数学建模】拟合算法+Matlab实现
- 美观又实用,纯 CSS 悬浮菜单让网站更加出色
- 无线通信原理学习博客