Python爬虫——爬取阳光高考专业数据并对所有专业进行数据分析

news2024/11/8 11:20:25

前言

阳光高考是中国高考信息网,覆盖了中国所有院校以及所有专业信息。本文目的是爬取阳光高考的专业信息,包括专业名称,专业代码,专业简介,男女比例,在校生规模,就业方向,平均薪资等。并将结果输出为CSV文件。

Robots.txt

老规则,首先查看该网站的robots.txt。
在这里插入图片描述网站禁止爬取/zzbm/tjr/目录下的内容,我们要爬取的信息不在该目录下,可以爬取。

分析待爬取页面

我们要爬取的页面是

https://gaokao.chsi.com.cn/zyk/zybk/detail/73381059

这个页面包含我们需要的所有信息,在页面打开F12控制台,刷新页面,可以我们需要的所有信息都通过一个接口传输。
在这里插入图片描述
接口采用GET请求,URL是https://gaokao.chsi.com.cn/zyk/zybk/specialityDetail/73381059。放入Postman测试,不需要任何参数、Cookie和请求头即可获取。获取的数据为Json格式,可以利用Json解析使用。通过Json解析后,我们获取其中的’专业代码’, ‘专业名称’, ‘专业大类’,‘学科大类’,‘专业介绍’,“学生规模”,“女生占比”,“就业方向”,“平均薪资”。


这仅仅是一个专业的数据,而我们需要获取所有专业,就需要回到上一级页面:

https://gaokao.chsi.com.cn/zyk/zybk/

在这个页面中,专业是按照树形分布的,十二大学科门类包括不同专业类,不同专业类又包括不同专业,而数据传输也是按照按照树形传输。首先可以获取到所有学科门类,然后请求某一学科门类,即可获取其中的所有专业类,请求其中一个专业类,即可获取且其中的所有专业及专业代码,包括specId,也就可以获取到目标页面的url。

  • 所有学科门类
    在这里插入图片描述
  • 某一学科门类的所有专业类
    在这里插入图片描述
  • 某一专业类的所有专业

在这里插入图片描述

编写爬虫逻辑

通过上面的分析,我们已经知道了所有专业的获取方式,接下来开始编写爬虫方法。

  • 爬取所有学科门类
def getBClass():
    url = "https://gaokao.chsi.com.cn/zyk/zybk/mlCategory/1050"
    response = requests.get(url,headers=mHeaders).text
    return response
  • 爬取某一学科门类的所有专业类
def getLClass(key,name):
    url = "https://gaokao.chsi.com.cn/zyk/zybk/xkCategory/" + key
    response = requests.get(url,headers=mHeaders).text
    return response
  • 爬取某一专业类的所有专业
def getMajor(key,name):
    url = "https://gaokao.chsi.com.cn/zyk/zybk/specialityesByCategory/" + key
    response = requests.get(url,headers=mHeaders).text
    return response
  • 获取专业页面的专业数据
def getMajorDescribe(key,name):
    url = "https://gaokao.chsi.com.cn/zyk/zybk/specialityDetail/" + key
    response = requests.get(url,headers=mHeaders).text
    return response
  • 递归爬取所有专业数据
BClass = json.loads(getBClass())["msg"]
Res = []
for bc in BClass:
    LClass = json.loads(getLClass(bc["key"],bc["name"]))["msg"]
    for lc in LClass:
        Major = json.loads(getMajor(lc["key"],bc["name"]))["msg"]
        for mj in Major:
            mDescribe = json.loads(getMajorDescribe(mj["specId"],mj["zymc"]))["msg"]
            zydm = mDescribe["zydm"] #专业代码
            zymc = mDescribe["zymc"] #专业名称
            zydl = mDescribe["ml"] #专业大类
            xkdl = mDescribe["xk"] #学科大类
            xsgm = mDescribe["xsgm"] #在校学生规模
            gp = mDescribe["girlPercent"] #女生占比
            zyjs = mDescribe["zyjs"] #专业介绍
            jy = "、".join(mDescribe["jyfx"]) #就业方向
            xz = mDescribe["xcspList"]
            xz_num = []
            for i in xz:
                xz_num.append(int(i["salary"]))
            if len(xz_num) != 0:
                pjxz = sum(xz_num)/len(xz_num) #平均薪资
            else:
                pjxz = 0
            res = [zydm,zymc,zydl,xkdl,zyjs,xsgm,gp,jy,pjxz]
            Res.append(res)
  • 将爬好的数据转为DataFrame并写入csv文件中
import pandas as pd
df = pd.DataFrame(Res, columns=['专业代码', '专业名称', '专业大类','学科大类','专业介绍',"学生规模","女生占比","就业方向","平均薪资"])
df.to_csv("专业.csv",index=False)

数据分析

这次爬虫最终获取到703个专业的所有信息。当然,阳光高考官网有更为详细的信息,此次爬取仅仅作为数据分析用,以下是几个分析结果。(数据来自阳光高考,数据中存在很多空值,分析结果仅供参考)

  • 所有数据
    在这里插入图片描述
  • 所有专业中薪资排行最高的专业分别为:国民经济管理、电信工程及管理、飞行技术。
    在这里插入图片描述
  • 所有专业中女生占比最高的专业分别为:女性学、学前教育、阿尔巴尼语,服装设计与工艺教育。
    在这里插入图片描述
  • 所有专业中学生规模最多的专业分别为:汉语言文学、机械设计制造及其自动化、电气工程及其自动化。
    在这里插入图片描述
  • 薪资水平直方图,由直方图可见,大部分专业的薪资水平集中在7000左右少数有高或低的,近似呈正态分布。
    在这里插入图片描述

结语

  • 现在是2023年6月8日,是全国高考的第二天,再此祝愿所有考生金榜题名。本文对专业的分析非常客观,各位还是要凭着个人的兴趣去选择专业,只有适合自己的专业才是最好的专业!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/624466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LVS负载均衡 DR模式

目录 -----------------DR模式 LVS负载均衡群集部署----------------------------------- 1.配置负载调度器(192.168.110.100) 2.部署共享存储(NFS服务器:192.168.80.13) 3.配置节点服务器(192.168.80.…

H5吊起微信小程序(适用于从短信、邮件、微信外网页等场景打开小程序任意页面)

​1.实现功能 H5页面中实现打开微信小程序的功能用户在网页中一键唤起小程序 2.前提条件 必须是企业的小程序获取AppID,也就是小程序唯一凭证,可在微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异…

springboot mybatis-plus 代码生成工具

介绍 基于mybatis-plus代码生成工具 后续会不断完善 规划 后续会基于此功能搞低代码平台,会有前端VUE mybatis-plus介绍&特性 • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 • 损耗小&#xff1…

【玩转Linux操作】查找命令时间日期指令

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题🥰 文章目录 🍔查找⭐find命令🎈按文件名&#x1f388…

Mac 远程连接Windows服务器

要从 Mac 电脑远程连接到 Windows 服务器,您可以使用 macOS 上内置的远程桌面连接 (RDC) 客户端。 方法如下: 确保您要连接的 Windows 服务器已启用远程桌面并且可以从您的网络访问。 您可能需要配置服务器的防火墙设置以允许远程桌面连接。 在您的 Ma…

Knife4j的请求示例当中有很多空白行

问题描述: 按正常来说不应该有上方的空白,当然如果只是查看我也不至于非要解决他,主要是假如接口是json传参,调试界面都没办法修改参数…网上相关的资料又非常少,我别的项目引用的同样的依赖并没有出现如此情况。 引入…

Java中泛型的?和T的区别

文章目录 1、前言2、java中泛型?、T2.1、?、T的概念2.2、?、T的用法2.1.1、T用法2.1.2、?用法 2.3、T、?在继承上的体现2.4、有限制通配符2.4.1、? extends A:2.4.2、? super A: 2.5、无限制通配符和有限制通配符的数…

峰会回顾 | 圆桌对话:低代码行业应用激发产业创新势能

编者荐语: 在万应低代码CMO徐智峰的主持下,中铁城建集团信息化管理部技术经理熊杰、中电信数智科技有限公司湖南分公司总经理助理施晓辉、湖南省建筑设计院集团数字科技中心开发部部长母建玉、长沙市规划信息服务中心技术总监尹彦围绕进行了精彩的圆桌对…

电脑监控系统有什么用处?

相信很多企业用户对电脑监控系统并不陌生,该系统存在于我们的日常工作中。我们都知道它会监管在工作时的行为,所以减少了很多摸鱼时间,只能一心工作。除此之外还有其他的很多功能,主要分为四大部分,下面让我们来一起了…

基于HAL库的STM32单定时器多路输入捕获测量PWM的频率和占空比实现(状态机方式实现)

目录 写在前面 先回顾下定时器的单路捕获PWM 多路捕获PWM的频率和占空比(状态机实现) 我的思路: 状态图 配置 给出示例代码 测试效果 写在前面 先有了这篇文章实现了单定时器的多通道测量频率,以外部时钟的方式可测量任意频率的方波),奈何不能多路…

教你如何多人播报配音把

你们有没有在日常生活中遇到短视频的配音呢?那你们知不知道多人播报配音呢?其实它就是指通过合成多个不同的声音,实现多人对话或演唱的效果,并且可选择不同的声音和语速进行播报。而且它可以应用在广告宣传、盲人听书、电影动画、…

FPGA实战开发-基于DDR的图像缓存(下)

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 例如: 基于米联科的学习资料,分享和学习同步,欢迎大家一起探讨。 整体架构流程 提示:这里可以添加技术整体架构 例如: image_data_gen产生了测试图片&…

1.1 C++友元函数与友元类

C友元 C中的友元(friend)是一种特殊的关系,它允许一个非成员函数或非当前类的成员函数访问一个类的私有成员。 具体来说,友元可以是一个函数、一个类或一个整个命名空间。 友元的声明通常在类定义中,它们可以被用来…

100G中长距离光模块,你选对了吗?

随着数据中心的快速发展,100G SR4支持的距离太短且成本又过高,在这种情况下,市场迎来了100G中长距离的解决方案:100G CWDM4和100G PSM4。对于100G中长距离方案选择也是各有千秋,下面就跟着小易来了解如何选择才是最合适…

idea中的快捷键大全, idea常用快捷键

文章目录 前言常用快捷键查找及修改快捷键根据快捷键名称查询根据快捷键查询修改快捷键 快捷键含义Alt/(代码提示)Ctrl/(注释当前行)CtrlF(在当前文件中搜索)CtrlShiftF(全局搜索)Ct…

自定义View中构造函数相关问题

目录 自定义View时,一个构造函数都不写,行不行?自定义View必须写构造函数,带几个参数? 自定义View时,一个构造函数都不写,行不行? 不行。 编译通不过。会提示: 为什么…

分布式系统概念和设计——复制技术

分布式系统概念和设计 复制 分布式系统中,复制是提高可用性和容错的关键技术。数据复制的技术,在多个计算机中维护数据的副本。复制是一种增强服务的技术。进行复制的动机包括改善服务性能,提高可用性,增强容错能力。 增强性能&…

遥感影像/无人机航片的空间分辨率GSD计算推导

遥感影像/无人机航片的空间分辨率GSD计算推导 参考资料1 参考资料2-地面分辨率,空间分辨率(GSD为地面采样间隔) GSD:无人机/遥感卫星的空间分辨率,指航片/遥感影像一个像素点代表的空间距离。 IFoV:单个像素代表的空间范围。 幅…

STM32开发——感应垃圾桶(舵机、超声波测距、振动检测)

目录 1.项目需求 2.sg90舵机介绍及实战 3.声波测距 4.感应垃圾桶 4.1GPIO口设置 4.2代码实现 1.项目需求 检测靠近时,垃圾桶自动开盖并伴随滴一声,2秒后关盖发生震动时,垃圾桶自动开盖并伴随滴一声,2秒后关盖按下按键时&…

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 输出检查

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 输出检查 在本视频中,将重点检查系统生成的输出。在向用户展示输出之前检查输出对于确保质量非常重要,提供给他们的响应的相关性和安全性,或者使用自动化或学习如何使用Moderation API。 Moderati…