用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脚本文件打包成可执行文件的方法
Jun 02 Python
python制作一个桌面便签软件
Aug 09 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
Python操作MySQL数据库的方法
Jun 20 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
python批量修改交换机密码的示例
Sep 22 Python
python关于倒排列的知识点总结
Oct 13 Python
关于python3.9安装wordcloud出错的问题及解决办法
Nov 02 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 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
第八节--访问方式
2006/11/16 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
js实现蒙版效果
2020/01/11 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
Python break语句详解
2014/03/11 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
html5唤起app的方法
2017/11/30 HTML / CSS
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
XML文档面试题
2015/08/05 面试题
市场营销专科应届生求职信
2013/11/24 职场文书
九年级历史教学反思
2014/01/27 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
倡导文明标语
2014/06/16 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
2016年寒假生活小结
2015/10/10 职场文书