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

前言

阳光高考是中国高考信息网,覆盖了中国所有院校以及所有专业信息。本文目的是爬取阳光高考的专业信息,包括专业名称,专业代码,专业简介,男女比例,在校生规模,就业方向,平均薪资等。并将结果输出为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日,是全国高考的第二天,再此祝愿所有考生金榜题名。本文对专业的分析非常客观,各位还是要凭着个人的兴趣去选择专业,只有适合自己的专业才是最好的专业!
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值