用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 相关文章推荐
以一段代码为实例快速入门Python2.7
Mar 31 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
详解python开发环境搭建
Dec 16 Python
python的socket编程入门
Jan 29 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
python解析yaml文件过程详解
Aug 30 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
python xlwt模块的使用解析
Apr 13 Python
教你怎么用python selenium实现自动化测试
May 27 Python
asyncio异步编程之Task对象详解
Mar 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
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
php数组去重的函数代码
2013/02/03 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
vue实现前台列表数据过滤搜索、分页效果
2019/05/28 Javascript
用Vue.js在浏览器中实现裁剪图像功能
2019/06/18 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python多进程机制实例详解
2015/07/02 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
工会主席岗位责任制
2014/02/11 职场文书