新闻动态

用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X

发布日期:2022-03-13 13:34 | 文章来源:CSDN

一、获取url

打开中国教育在线网,按 F12,顶部选择NetWork,选择XHR

刷新页面,观察url,通过对Reponse的分析找到真正的url为:https://api.eol.cn/gkcx/api/

数据存储在Json中。

再点击Headers,查看请求参数

请求方式为POST

二、发送请求

拿到url,我们就可以利用requests模拟浏览器发送请求,拿到返回的Json数据。代码如下:

# 导入包
import numpy as np
import pandas as pd
import requests
import json
from fake_useragent import UserAgent
import time
# 获取一页
def get_one_page(page_num):
 # 获取URL
 url = 'https://api.eol.cn/gkcx/api/'
 # 构造headers
 headers = {
  'User-Agent': UserAgent().random,
  'Origin': 'https://gkcx.eol.cn',
  'Referer': 'https://gkcx.eol.cn/school/search?province=&schoolflag=&recomschprop=',
 }
 # 构造data
 data = {
  'access_token': "",
  'admissions': "",
  'central': "",
  'department': "",
  'dual_class': "",
  'f211': "",
  'f985': "",
  'is_dual_class': "",
  'keyword': "",
  'page': page_num,
  'province_id': "",
  'request_type': 1,
  'school_type': "",
  'size': 20,
  'sort': "view_total",
  'type': "",
  'uri': "apigkcx/api/school/hotlists",
 }
 # 发起请求
 try:
  response = requests.post(url=url, data=data, headers=headers)
 except Exception as e:
  print(e) 
  time.sleep(3) 
  response = requests.post(url=url, data=data, headers=headers)

三、解析json数据

根据Response返回的Json格式,解析出我们想要的内容,代码如下:

# 解析获取数据
 school_data = json.loads(response.text)['data']['item']
 # 学校名
 school_name = [i.get('name') for i in school_data]
 # 隶属部门
 belong = [i.get('belong') for i in school_data]
 # 高校层次
 dual_class_name = [i.get('dual_class_name') for i in school_data]
 # 是否985
 f985 = [i.get('f985') for i in school_data]
 # 是否211
 f211 = [i.get('f211') for i in school_data]
 # 办学类型
 level_name = [i.get('level_name') for i in school_data]
 # 院校类型
 type_name = [i.get('type_name') for i in school_data]
 # 是否公办
 nature_name = [i.get('nature_name') for i in school_data]
 # 人气值
 view_total = [i.get('view_total') for i in school_data]
 # 省份
 province_name = [i.get('province_name') for i in school_data]
 # 城市
 city_name = [i.get('city_name') for i in school_data]
 # 区域
 county_name = [i.get('county_name') for i in school_data]
 
 # 保存数据
 df_one = pd.DataFrame({
  'school_name': school_name,
  'belong': belong,
  'dual_class_name': dual_class_name,
  'f985': f985,
  'f211': f211,
  'level_name': level_name,
  'type_name': type_name,
  'nature_name': nature_name,
  'view_total': view_total,
  'province_name': province_name,
  'city_name': city_name,
  'county_name': county_name,
 })
 return df_one

四、存入Excel

先将数据存入Pandas,用于做数据分析,再写入Excel存储。

# 获取多页
def get_all_page(all_page_num):
 # 存储表
 df_all = pd.DataFrame()
 # 循环页数
 for i in range(all_page_num):
  # 打印进度
  print(f'正在获取第{i + 1}页的高校信息')
  # 调用函数
  df_one = get_one_page(page_num=i+1)
  # 追加
  df_all = df_all.append(df_one, ignore_index=True)
  # 休眠
  time.sleep(np.random.uniform(2))
 return df_all

# 运行函数
df_school = get_all_page(all_page_num=143)
# 读出数据
df_school.to_excel('./data/全国高校数据.xlsx', index=False)

五、运行代码

六、数据展示

七、数据可视化

1.各省市地区高校数量分布 柱形图:

地图

各个省的高校层次分布

全国高校类型分布

有了上面的数据,是不是对全国的高校有一定了解了

到此这篇关于用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X的文章就介绍到这了,更多相关Python爬取数据并可视化内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

美国稳定服务器

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部
请您留言

YINGSOO400-630-3752

提交