用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 相关文章推荐
python实现12306火车票查询器
Apr 20 Python
简单谈谈python中的语句和语法
Aug 10 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
python中的json总结
Oct 11 Python
python从子线程中获得返回值的方法
Jan 30 Python
python字典一键多值实例代码分享
Jun 14 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Python连接字符串过程详解
Jan 06 Python
python opencv如何实现图片绘制
Jan 19 Python
python 实现线程之间的通信示例
Feb 14 Python
浅析Python的命名空间与作用域
Nov 25 Python
python推导式的使用方法实例
Feb 28 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php小技巧之过滤ascii控制字符
2014/05/14 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
二级域名转向类
2006/11/09 Javascript
起点页面传值js,有空研究学习下
2010/01/25 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
详解python中的线程
2018/02/10 Python
python实现定时提取实时日志程序
2018/06/22 Python
python实现顺序表的简单代码
2018/09/28 Python
pycharm 在windows上编辑代码用linux执行配置的方法
2018/10/27 Python
python读取并写入mat文件的方法
2019/07/12 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
女方婚礼新郎答谢词
2014/01/11 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
初中中等生评语
2014/12/29 职场文书
张思德观后感
2015/06/09 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
java项目构建Gradle的使用教程
2022/03/24 Java/Android