用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编程中的反模式实例分析
Dec 08 Python
Python中用sleep()方法操作时间的教程
May 22 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
python筛选出两个文件中重复行的方法
May 31 Python
我喜欢你 抖音表白程序python版
Apr 07 Python
Django静态资源部署404问题解决方案
May 11 Python
Python基于jieba, wordcloud库生成中文词云
May 13 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
Python使用MapReduce进行简单的销售统计
Apr 22 Python
pytest实现多进程与多线程运行超好用的插件
Jul 15 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
python 域名分析工具实现代码
2009/07/15 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
易程科技软件测试笔试
2013/03/24 面试题
优秀毕业生推荐信
2013/11/02 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
化妆品促销活动总结
2015/05/07 职场文书
花木兰观后感
2015/06/10 职场文书
《绝招》教学反思
2016/02/20 职场文书
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers