用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 20 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
Python实现的选择排序算法示例
Nov 29 Python
python自动查询12306余票并发送邮箱提醒脚本
May 21 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
python多线程与多进程及其区别详解
Aug 08 Python
使用Python防止SQL注入攻击的实现示例
May 21 Python
浅谈python 调用open()打开文件时路径出错的原因
Jun 05 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 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语法速查表
2006/12/06 PHP
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
网页游戏开发入门教程三(简单程序应用)
2009/11/02 PHP
php && 逻辑与运算符使用说明
2010/03/04 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
基于jquery的超简单上下翻
2010/04/20 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
Python随机生成彩票号码的方法
2015/03/05 Python
python if not in 多条件判断代码
2016/09/21 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
深圳-东方伟业笔试部分
2015/02/11 面试题
小区门卫值班制度
2014/01/24 职场文书
新闻报道策划方案
2014/06/11 职场文书
中文专业自荐书
2014/06/29 职场文书
中学生自我评价2015
2015/03/03 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书