用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封装对象实现时间效果
Apr 23 Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
简单介绍Python中的JSON模块
Apr 08 Python
Python处理JSON数据并生成条形图
Aug 05 Python
Python selenium 三种等待方式解读
Sep 15 Python
Python中模块pymysql查询结果后如何获取字段列表
Jun 05 Python
查看django版本的方法分享
May 14 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
Django模型验证器介绍与源码分析
Sep 08 Python
Python之字典添加元素的几种方法
Sep 30 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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/10/09 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
Script的加载方法小结
2011/01/12 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
Python学习笔记之自定义函数用法详解
2019/06/08 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
Python descriptor(描述符)的实现
2020/11/15 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
优秀员工自荐书
2013/12/19 职场文书
大学生的网络创业计划书
2013/12/26 职场文书
顶岗实习计划书
2014/01/10 职场文书
三项教育活动实施方案
2014/03/30 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
施工员岗位职责范本
2015/04/11 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书
工作报告范文
2019/06/20 职场文书