用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的Django框架中更新数据库数据的方法
Jul 17 Python
如何利用Fabric自动化你的任务
Oct 20 Python
python模仿网页版微信发送消息功能
Feb 24 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
Oct 31 Python
Django之无名分组和有名分组的实现
Apr 16 Python
Django多数据库的实现过程详解
Aug 01 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
python实现简易版学生成绩管理系统
Jun 22 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
【超详细】八大排序算法的各项比较以及各自特点
Mar 31 Python
python scrapy简单模拟登录的代码分析
Jul 21 Python
yolov5返回坐标的方法实例
Mar 17 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中变量及部分适用方法
2008/03/27 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
关于js陀螺仪的理解分析
2019/04/11 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
Python序列化pickle模块使用详解
2020/03/05 Python
计算机求职信
2013/12/01 职场文书
工程招投标邀请书
2014/01/30 职场文书
《晏子使楚》教学反思
2014/02/08 职场文书
运动会开幕式主持词
2014/03/28 职场文书
大学生工作求职信
2014/06/23 职场文书
应届大学生求职信
2014/07/20 职场文书
2015年加油站工作总结
2015/05/13 职场文书