用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查询IP地址归属完整代码
Jun 21 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
python实现泊松图像融合
Jul 26 Python
Python玩转加密的技巧【推荐】
May 13 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
pyCharm 实现关闭代码检查
Jun 09 Python
python3让print输出不换行的方法
Aug 24 Python
python 爬虫爬取京东ps4售卖情况
Dec 18 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 Python
python 自动化偷懒的四个实用操作
Apr 11 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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需登录的文件上传管理系统
2020/03/21 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
php和html的区别点详细总结
2019/09/24 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
Python中new方法的详解
2019/01/15 Python
python assert的用处示例详解
2019/04/01 Python
Python的互斥锁与信号量详解
2019/09/12 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
文秘专业毕业生就业推荐信
2013/11/08 职场文书
军训考核自我鉴定
2014/02/13 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
机电一体化专业求职信
2014/07/22 职场文书
通知函格式范文
2015/04/27 职场文书
教师培训简讯
2015/07/20 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
Python并发编程实例教程之线程的玩法
2021/06/20 Python
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技