用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 相关文章推荐
PHP webshell检查工具 python实现代码
Sep 15 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
python leetcode 字符串相乘实例详解
Sep 03 Python
在Python中定义一个常量的方法
Nov 10 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
深入理解Python 多线程
Jun 16 Python
Python unittest基本使用方法代码实例
Jun 29 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
Spy++的使用方法及下载教程
Jan 29 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
建立动态的WML站点(一)
2006/10/09 PHP
fgetcvs在linux的问题
2012/01/15 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python松散正则表达式用法分析
2016/04/29 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
HTML5的新特性(1)
2016/03/03 HTML / CSS
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
转预备党员政审材料
2014/02/06 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
2015年植树节活动总结
2015/02/06 职场文书
高一地理教学工作总结
2015/08/12 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL