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


Posted in Python onJune 11, 2021

一、获取url

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

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

数据存储在Json中。

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

再点击Headers,查看请求参数

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

请求方式为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)

五、运行代码

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

六、数据展示

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

七、数据可视化

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

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

地图

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

各个省的高校层次分布

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

全国高校类型分布

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

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

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

Python 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
python基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
python基础教程之类class定义使用方法
Feb 20 Python
python基础教程之循环介绍
Aug 29 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Python读写及备份oracle数据库操作示例
May 17 Python
Python不使用int()函数把字符串转换为数字的方法
Jul 09 Python
pandas计数 value_counts()的使用
Jun 24 Python
python实现BP神经网络回归预测模型
Aug 09 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
详解pytorch创建tensor函数
Mar 22 Python
用python修改excel表某一列内容的操作方法
Windows安装Anaconda3的方法及使用过程详解
Python Flask请求扩展与中间件相关知识总结
Jun 11 #Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Python3中PyQt5简单实现文件打开及保存
Jun 10 #Python
You might like
树型结构列出指定目录里所有文件的PHP类
2006/10/09 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php实现删除空目录的方法
2015/03/16 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
vue 之 .sync 修饰符示例详解
2018/04/21 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
使用Python编写vim插件的简单示例
2015/04/17 Python
python文件与目录操作实例详解
2016/02/22 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
对python修改xml文件的节点值方法详解
2018/12/24 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
征用土地赔偿协议书
2014/09/26 职场文书
李强感恩观后感
2015/06/17 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL
Go语言设计模式之结构型模式
2021/06/22 Golang
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
golang为什么要统一错误处理
2022/04/03 Golang