用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 安装setuptools和pip工具操作方法(必看)
May 22 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python列表生成式与生成器操作示例
Aug 01 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
Python爬虫实现验证码登录代码实例
May 10 Python
树莓派用python中的OpenCV输出USB摄像头画面
Jun 22 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
python障碍式期权定价公式
Jul 19 Python
python中的错误如何查看
Jul 08 Python
Python面向对象实现方法总结
Aug 12 Python
python opencv通过按键采集图片源码
May 20 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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结合飞信 免费天气预报短信
2009/05/07 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
PHP中Array相关函数简介
2016/07/03 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
javascript eval和JSON之间的联系
2009/12/31 Javascript
jQuery each()小议
2010/03/18 Javascript
js 居中漂浮广告
2010/03/21 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
JS实现轮播图效果
2020/01/11 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
利用Python演示数型数据结构的教程
2015/04/03 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
主题酒店策划书
2014/01/28 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
会计求职自荐信范文
2015/03/04 职场文书
自我推荐信格式模板
2015/03/24 职场文书
python实现网络五子棋
2021/04/11 Python
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android