其实特简单,1分钟爬取全国高校信息并制成大屏可视化
大家好,记得当初高考完,我选学校的时候是在书店买的高校信息排名的书,然而书中的信息都是很久之前的,并没有什么太大帮助。
【注】文末提供技术交流群
干货推荐
- 深度盘点:这20套可视化炫酷大屏真香啊(附源码)
- 值得收藏,这6种制作竞赛动图的方法妙不可言
- 绝了,这6个精挑细选的机器学习资料简直太香了
- Python数据分析三剑客真香啊,还有高清思维导图
- Python编程从入门到实战,看这一篇足够了
今天就来带大家爬点真正有用的东西,全国高校信息,涵盖绝大多数高校,并制作可视化看板。话不多说,进入正题!
数据爬取
地址:https://www.gaokao.cn/school/140
F12
打开开发者工具,通过抓包工具很轻松就获取到了 json
文件。我们直接对该链接发起请求,就可以获取对应大学的信息。
另外对比发现 https://static-data.eol.cn/www/2.0/school/140/info.json
,关键参数 140 为学校ID,但ID不是连续的,所以,我们爬取时只能根据大致的学校数量进行爬取。
爬取代码
导入模块
import aiohttp
import asyncio
import pandas as pd
from pathlib import Path
from tqdm import tqdm
import time
简单说明一下主要模块的用途:
aiohttp:可以实现单线程并发 IO 操作。如果仅用在客户端,发挥的威力不大,只是为了搭配
asyncio
来使用,因为requests
不支持异步。如果把asyncio
用在服务器端,例如 Web 服务器,由于 HTTP 连接就是 IO 操作,因此可以用 单线程 +coroutine
实现多用户的高并发支持。asyncio:提供了完善的异步IO支持,可以将多个协程(
coroutine
)封装成一组Task
然后并发执行。pandas:将爬取的数据转为
DataFrame
类型,并生成csv
文件。pathlib:面向对象的编程方式来表示文件系统路径。
tqdm:只需使用
tqdm(iterable)
包装任何可迭代对象,就能让你的循环生成一个智能进度条。
生成URL序列
通过指定的 URL
模板与 max_id
生成 URL
序列,这里添加了一个去重操作,如果之前已采集过高校信息,它会根据同目录下的文件,剔除已采集的高校ID,仅采集未获取过的高校信息。
def get_url_list(max_id):url = 'https://static-data.eol.cn/www/2.0/school/%d/info.json'not_crawled = set(range(max_id))if Path.exists(Path(current_path, 'college_info.csv')):df = pd.read_csv(Path(current_path, 'college_info.csv'))not_crawled -= set(df['学校id'].unique())return [url%id for id in not_crawled]
采集JSON数据
通过协程对URL序列发出请求,注意要限制并发量,Window:500,Linux:1024
。
async def get_json_data(url, semaphore):async with semaphore:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',}async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False), trust_env=True) as session:try:async with session.get(url=url, headers=headers, timeout=6) as response:# 更改相应数据的编码格式response.encoding = 'utf-8'# 遇到IO请求挂起当前任务,等IO操作完成执行之后的代码,当协程挂起时,事件循环可以去执行其他任务。json_data = await response.json()if json_data != '':return save_to_csv(json_data['data'])except:return None
数据解析保存
JSON数据中的字段有很多,大家可以根据自己的情况解析保存自己需要的字段。
def save_to_csv(json_info):save_info = {}save_info['学校id'] = json_info['school_id'] # 学校idsave_info['学校名称'] = json_info['name'] # 学校名字level = ""if json_info['f985'] == '1' and json_info['f211'] == '1':level += "985 211"elif json_info['f211'] == '1':level += "211"else:level += json_info['level_name']save_info['学校层次'] = level # 学校层次save_info['软科排名'] = json_info['rank']['ruanke_rank'] # 软科排名save_info['校友会排名'] = json_info['rank']['xyh_rank'] # 校友会排名save_info['武书连排名'] = json_info['rank']['wsl_rank'] # 武书连排名save_info['QS世界排名'] = json_info['rank']['qs_world'] # QS世界排名save_info['US世界排名'] = json_info['rank']['us_rank'] # US世界排名save_info['学校类型'] = json_info['type_name'] # 学校类型save_info['省份'] = json_info['province_name'] # 省份save_info['城市'] = json_info['city_name'] # 城市名称save_info['所处地区'] = json_info['town_name'] # 所处地区save_info['招生办电话'] = json_info['phone'] # 招生办电话save_info['招生办官网'] = json_info['site'] # 招生办官网df = pd.DataFrame(save_info, index=[0])header = False if Path.exists(Path(current_path, 'college_info.csv')) else Truedf.to_csv(Path(current_path, 'college_info.csv'), index=False, mode='a', header=header)
调度程序
调度整个采集程序。获取URL>>限制并发量>>创建任务对象>>挂起任务
async def main(loop):# 获取url列表url_list = get_url_list(5000)# 限制并发量semaphore = asyncio.Semaphore(500)# 创建任务对象并添加到任务列表中tasks = [loop.create_task(get_json_data(url, semaphore)) for url in url_list]# 挂起任务列表for t in tqdm(asyncio.as_completed(tasks), total=len(tasks)):await t
以上就是程序运行的主要代码。
运行效果
这里采集ID在5000以内的高校信息,如果要尽可能多的采集高校信息的话,建议多次运行,直至无新增数据。
第一次运行(采集到2140行)第二次运行(采集到680行)
通过两次运行共采集到2820行数据。下面我们开始可视化部分。
Tableau可视化
相比于其他的可视化工具或者第三方绘图库,我更倾向于 Tableau,上手十分简单,想要了解的可以看一下 Tableau Public,这里发布了很多大牛的作品。
https://public.tableau.com/app/discover
它唯一的缺点就是收费,如果是学生的话,可以免费使用,否则,建议先用免费版的 Tableau Public,等到充分了解后再考虑付费。
对于本次的可视化,总共绘制有四个图表。
高校数量分布地图
高校数量排名前三的分别是江苏、广东、河南(仅供参考)
软科高校排名TOP10
根据软科排名来看,全国TOP10的高校绝大多数都是综合类,理工类的只有第七名的中国科学技术大学。
高校层次分布
从采集的数据中来看, 211 的高校占比本科院校约 9.5% ,985 的高校占比本科院校约 3.5%,果然是凤毛麟角。
高校类型分布
学校类型主要还是理工类和综合类,二者数量基本持平,都遥遥领先于其他的类型。数量第二层级为财经类,师范类,医药类。
合成看板
将上述的工作表合并成一个看板,过程十分简单,只需要将图标拖拽到指定位置即可。再添加一个筛选操作,点击地图中的某个省份联动其他工作表。
看板已发布到 Tableau Public。可以在线编辑,或下载整个可视化工作包,链接如下:
https://public.tableau.com/shared/ZCXWTK6SP?:display_count=n&:origin=viz_share_link
这就是今天要和大家分享的内容,包含数据采集->数据处理->可视化。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加入Python学习交流群共同探讨学习。
技术交流
欢迎转载、收藏、有所收获点赞支持一下!
目前开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
- 方式①、发送如下图片至微信,长按识别,后台回复:加群;
- 方式②、添加微信号:dkl88191,备注:来自CSDN
- 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群
其实特简单,1分钟爬取全国高校信息并制成大屏可视化相关推荐
- 1分钟爬取全国高校信息,制成大屏可视化!
记得当初高考完,我选学校的时候是在书店买的高校信息排名的书,然而书中的信息都是很久之前的,并没有什么太大帮助.今天就来带大家爬点真正有用的东西,全国高校信息,涵盖绝大多数高校,并制作可视化看板.话不多 ...
- python查询高校信息_Python 3爬取全国高校基本信息-Go语言中文社区
最近接了一个单子,是爬取全国高校的基本信息,高校名字,高校层次,高校地区,招生办电话,招生办官网~ 镇楼图如下: 开发环境:python3.6(最新3.7也可以的) +pycharm 第三放库:req ...
- python爬取中国大学_Python 3爬取全国高校基本信息
最近接了一个单子,是爬取全国高校的基本信息,高校名字,高校层次,高校地区,招生办电话,招生办官网~ 镇楼图如下: 信息源网址是:https://gkcx.eol.cn/ 开发环境:python3.6( ...
- 用python爬取考研信息网_【高考、考研党的福利】使用Python爬取全国高校及GIS/RS专业信息【附代码和Excel】...
题外话:前一段时间翻译了一部关于GIS的纪录片,然后发了一篇文章,没想到有这么多人感兴趣,为了让广大GISER知道有这部神片,遂想投稿至GIS相关的专栏,不曾想居然还没人开设,真是"绕树三匝 ...
- python爬取全国高校在某省的录取分数线
前些日子,同事的孩子参加高考,知道分数后让我帮忙参考报学校,作为一个已过不惑之年的油腻大叔,远离学校已经16年了,各个高校在我省得录取批次.人数.分数(位次)一无所知,幸亏有无所不知的互联网,但是全国 ...
- (三)爬取新房销售信息——位置坐标转换+地图标点可视化篇
在上一次用pandas做数据分析.matplotlib实现可视化的任务中,主要对于"价格"信息做了简单的处理,了解到赣州地区房价水平的范围,各区县的房价水平,根据自己的预算大致可以 ...
- python 3爬取 全国高校对四川历年招生数据(文理省控线,文理专业线)存入Excel表(重构)
原文章地址:https://blog.csdn.net/memory_qianxiao/article/details/82388370 由于很多朋友需要这种数据,因为发布以来,有很多人再问我要源代码 ...
- Python爬取全国火锅店,并利用地图可视化展示
今天给大家分享一个数据可视化案例:如何获取全国不同城市火锅店数量情况,并将这些数据进行可视化展示,以更加直观的方式去浏览全国不同省份.不同城市的火锅店分布情况. 本文数据来自于某度地图,通过pytho ...
- 使用python scrapy爬取全国小区信息(包括小区价格,经纬度,面积,户数等),并保存到mysql和excel
目标 此次爬取的网站是楼盘网,因为只爬取小区信息,所以先从深圳小区(http://sz.loupan.com/community/)网页入手分析,然后发散爬取至全国. 爬取的信息包括 省,所属市,所属 ...
最新文章
- 马腾宇:AI 学界一颗冉冉升起的新星
- ipc$连接失败的常见原因
- 为什么mysql与eclipse_mysql的用户名和密码都是正确的,但是eclipse启动说不对
- Flutter实战视频-移动电商-45.详细页_说明区域UI编写
- SP2010开发和VS2010专家食谱--第六章节--Web Services和REST(5)--Inserting new contacts through REST...
- Ubuntu SDL lib 安装
- 李航统计方法——感知机
- 从java 转到 c# 知识点
- vasp544编译安装
- 30个值得推荐的数据可视化工具--转
- 一名「数据分析师」职业思考与规划
- [英语阅读]《花花公子》十大派对大学出炉
- 数组的下标为什么从0开始而不是从1开始
- linux怎样加载8188网卡,Linux安装无线网卡RTL8188CE驱动
- 大数据常用的开发工具
- WFA程序C#窗体间传值
- 互联网公司程序员和外包公司程序员有什么区别?
- pyecharts geo绘制地理信息地图
- 快递100发送短信提醒
- 计算机音乐一次就好歌词,杨宗纬一次就好乐谱及歌词