一、获取url
打开中国教育在线网,按 f12
,顶部选择network
,选择xhr
刷新页面,观察url
,通过对reponse
的分析找到真正的url
为:https://api.eol.cn/gkcx/api/
数据存储在json
中。
再点击headers
,查看请求参数
请求方式为post
二、发送请求
拿到url,我们就可以利用requests
模拟浏览器发送请求,拿到返回的json
数据。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# 导入包 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
格式,解析出我们想要的内容,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# 解析获取数据 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
存储。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 获取多页 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爬取数据并可视化内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/skylibiao/article/details/117679674