用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 相关文章推荐
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
Python 25行代码实现的RSA算法详解
Apr 10 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
python分批定量读取文件内容,输出到不同文件中的方法
Dec 08 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
Python读取指定日期邮件的实例
Feb 01 Python
python3使用matplotlib绘制条形图
Mar 25 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 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会话控制实例分析
2016/12/24 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
使用TensorFlow实现SVM
2018/09/06 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
小学岗位竞聘方案
2014/01/22 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
党员剖析材料范文
2014/09/30 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
变长双向rnn的正确使用姿势教学
2021/05/31 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL