用Python展示全国高校的分布情况

 

本文用Python展示了全国高校的分布情况,全国的高校哪些地方多,哪些地方少,可以一目了然地看到。

数据获取

要展示高校的分布情况,就得先获取全国高校的位置数据。本文的数据来源于掌上高考网(https://www.gaokao.cn/school/search)。

在2022年7月写本文时,共获取到了2822所高校的信息。检查了数据,除了极个别空值外,整份数据是非常完整的,不影响使用。数据一共有44个字段,本文只会用几个字段,可以不做处理,使用时按需获取即可。

数据获取方法介绍(基础爬虫知识):

1.注册登录掌上高考网。在<查学校>页面选择全部学校。

2.按F12键,点击到 Network > Fetch/XHR,然后点击几次<查学校>页面的<上一页>、<下一页>按钮,在XHR的页面会显示访问的API等信息。

3.将每次翻页时的API复制出来进行对比,发现翻页时变化的参数有两个:page和signsafe,page为当前访问的页数,signsafe是一个md5值,没法反解,但可以把前面几次的值保存下来,后面随机变化使用。有了这个信息,不断改变访问的页数和signsafe值,就可以获取到所有的学校数据。

Response中的numFound参数值是学校总数,除以每页显示的学校个数可以得到总页数,也可以直接点击页面的<尾页>查看总页数,这样就确定了访问的次数。

4.因为网站需要登录才能使用,所以还要获取访问时的Headers,如Request Method(此次用POST)、User-Agent等。

5.有了上面的信息,循环拼接出所有页面的url,用requests发送请求即可获取到所有高校的数据,然后用pandas将数据写到excel中。

温馨提示:获取数据时需遵守网站的相关声明,爬虫代码尽量设置一定的时间间隔,不要在访问高峰期运行爬虫代码。

人民网最新公布:全国的普通高校数是2759所,与本文从掌上高考网获取的2822所相差63所,主要是部分学校的分校统计方式不同造成的差异。本文所展示的是分布情况,这个差异的影响不大。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PythonCharts是一个基于Python的图表库,它允许开发者创建各种静态和交互式的图表。如果你想制作全国211大学分布图,PythonCharts可能不是最直接的选择,因为它可能不支持直接绘制地理位置分布图,但你可以使用其他Python数据可视化库,如Matplotlib、Seaborn或Plotly等,它们提供了地图绘制功能。 例如,你可以用geopandas(结合matplotlib或folium)来展示211大学在中国地图上的分布。首先,你需要获取包含211大学地理位置信息的数据,然后加载数据到GeoDataFrame中,最后使用这些库进行绘图。 以下是简单的步骤: 1. 安装必要的库:`pip install geopandas matplotlib folium` 2. 导入所需的模块: ```python import geopandas as gpd import matplotlib.pyplot as plt import folium ``` 3. 加载地理数据和211大学数据: ```python # 假设你已经有了一个包含大学名称和经纬度的CSV文件 university_data = gpd.read_file('university_locations.csv') ``` 4. 将大学数据与中国的省级行政区划(province boundaries)合并: ```python admin_boundaries = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) merged = admin_boundaries.merge(university_data, on='province_code', how='left') ``` 5. 绘制地图: ```python # 使用matplotlib或folium if 'folium' in sys.modules: # 如果folium可用 m = folium.Map(location=[merged['lat'].mean(), merged['lon'].mean()], zoom_start=6) for _, row in merged.iterrows(): folium.Marker([row['lat'], row['lon']], popup=row['name']).add_to(m) m.save("universities_distribution.html") else: # 如果matplotlib可用 merged.plot(column='name', cmap='OrRd', legend=True) plt.show() ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值