基于Python的就业信息获取与分析

2021-05-28 12:38庞丽彭立伟余豪夏童赵付英
现代计算机 2021年10期
关键词:爬虫薪资工程师

庞丽,彭立伟,余豪,夏童,赵付英

(1.西南石油大学网络与信息化中心,成都610500;2.西南石油大学机电工程学院,成都610500;3.西南石油大学电气信息学院,成都610500;4.西南石油大学地球科学与技术学院,成都610500;5.西南石油大学化学化工学院,成都610500)

0 引言

随着高校的扩招,社会学历普遍提高,大学毕业生人数逐年上涨,大学生就业形式也变得更加严峻,如何及时可持续性的获取有效就业信息,并加以分析做出相应决策对于大学生而言显得尤为重要。通过手动搜索招聘网站、学校/企业/事业单位官网、微信公众号、各省市人力资源网等发布的招聘信息,可以获得海量的就业信息,然而这种方式都需要到相应网站翻页查找,重复的在不同网站之间切换,存在耗费时间长、搜索速度慢、信息获取不及时、不利于集中分析统计等缺点,导致大学生容易错过适合的岗位信息。针对目前的这种情况,本文提出了基于Python的就业信息获取与分析的方法,以期为大学生搜索分析就业信息提供一定的参考价值。

1 网络爬虫简介

网络爬虫又称为网络蜘蛛,是一种按照一定的规则,自动抓取万维网信息的程序或脚本[1],基本原理是模拟计算机对服务器发起Requests请求,然后接收服务器端返回的Response内容对其进行解析,以提取所需信息。根据网络爬虫爬取的对象和范围不同可将其分为通用网络爬虫和聚焦网络爬虫(即主题网络爬虫)[2],其中,通用网络爬虫爬取目标范围广,通常用于搜索引擎;而聚焦网络爬虫则是针对某个特定目标和主题进行爬取[3]。Python因其语言的简洁性、易读性以及可扩展性[4],在编写网络爬虫时具有其他语言不可比拟的优势,其强大的第三方库不仅极大节省了开发人员编写修改代码的时间,还支持数据清洗和可视化,为后期的数据整理和分析提供了便捷,因此,本文采取Python语言编写爬虫代码,采用主题爬虫的策略来实现就业信息的批量获取。

2 爬虫程序设计

获取相应网站的信息首先需要手动翻页,通过观察列表页的URL,找到URL的构成规律;然后通过循环语句,依次将URL取出;最后抓取URL页面相应的数据并存储在本地进行数据清洗及分析。本文拟以拉勾网为例,通过编写爬虫程序抓取“Python”相关岗位的就业信息,获取的信息包括公司名称、公司规模、招聘岗位、公司福利、工作地址、薪资水平、工作经验、职位类型、学历要求、发布日期等,并将抓取的就业信息保存在MongoDB数据库中,以便后期进行数据处理和可视化分析。

2.1 分析网页结构

使用谷歌浏览器进入拉勾网,输入Python关键字搜索就业信息,通过查看源代码发现网页元素不在源代码中,判断使用了AJAX(异步加载)技术,这种网页要使用逆向工程来抓取数据[5]。利用谷歌浏览器开发者工具,选中XHR(可扩展超文本传输请求),通过观察Preview标签,可发现我们要获取的信息都存放在Response返回的JSON文件中,进一步手动翻取拉勾网页面,请求的URL并未发生变化,进一步分析发现是利用POST方法提交表单数据依据pn字段来实现页数的变化,通过这些分析编写程序代码构造出列表页。同时为避免网站把访问当作爬虫程序加以阻止,要使用cookie信息进行模拟登录,以获取信息。

2.2 获取就业信息数据

就业信息获取的实现主要包括三个部分:一是编写getWebResult函数,用于获取Response返回的JSON文件,从而得到岗位全部信息。首先需要创建一个Session对象,使用Session维持同一个对话,从而获取该对话的cookie,利用cookie实现模拟登录,然后获取JSON文件职位相关信息。

二是编写warefare_combine、address_combine函数对岗位信息中的福利数据和地址数据进行预处理,在爬取信息的时候,有的公司的福利、所在城市或城市所属区域没有写,读取时会返回结果None,由于None不能与字符串相加会导致爬取报错,所以需要定义合并福利和地址的函数,当返回结果为None时,将其设置为空字符'',然后再实现相加。

三是编写getJob_Infos函数,用于将获取的岗位信息存储在MongoDB数据库中,需要导入PyMongo库文件,连接数据库并建立数据库和数据集合。由于要将爬取的信息插入到数据库中进行存储,在循环调用函数之前还需要设置一个用来标示csv是否创建表头的参数,表头包括:公司、规模、招聘岗位、福利、工作地址、工资、工作经验、职位类型、学历要求以及发布时间,表头创建完成之后再将爬取的信息逐条插入到数据库中。循环体主要实现两部分功能,一是循环读取岗位信息并将福利和工作地址进行合并,避免出现爬取程序失败,二是循环将信息逐条插入到数据库中,表头所对应的字段名可利用Preview标签查看JSON文件,以便准确读取相应内容。通过以上功能的编写即可爬取python岗位相关就业信息。当控制台提示“爬取信息结束!”,可在MongoDB数据库中导出数据,导出的格式为CSV,由于编码不同,用Excel打开文件会出现乱码,先选用记事本打开,选择编码方式为ANSI再保存,打开文件后则显示正常,如图1展示了爬取的就业信息。

图1 爬取的就业信息

2.3 就业信息数据处理

根据图1所展示的爬取结果可以看出获取的数据存在一些问题,不利于对数据进行分析,主要体现在:①工作地址具体到各个区,不利于宏观了解Python岗位在各个城市的需求,需要将工作地址升级到市级;②工资格式显示形式为区间,需要将最低工资和最高工资分开,便于了解Python岗位的薪资水平。选择Excel作为数据处理工具,利用其提供的LEFT函数、FIND函数以及MID函数可以快速有效地对数据进行整理分析。

经过处理后的就业信息数据如图2所示。

图2 处理后的就业信息

3 就业信息可视化分析

根据前面整理好的数据,利用Excel的图表功能对Python岗位招聘信息进行可视化分析,并结合Python的jieba分词、WordCloud对岗位类型进行词频统计并词云化。

从学历要求来看(如图3所示),从事Python相关的职业对学历要求并不高,84%的岗位仅要求本科学历即可,对硕士研究生的需求仅占2%,更加注重的是工作经验(如图4所示),要求有3-5年工作经验的占42%,有1-3年工作经验的占30%,应届毕业生由于没有相关工作经验,符合需求的岗位仅占9%,建议大学生在校期间多参与实战项目或者实习,了解当前技术的发展方向,熟悉项目的流程,积累更多的实战经验,以便在择业时有更多选择的空间。

图3 Python岗位学历要求占比图

图4 Python岗位 工作经验占比图

从招聘所在城市来看(如图5所示),对Python岗位需求较大的是北京、上海、深圳、广州这四个一线城市,其次是杭州、成都、武汉等新一线城市,二三线城市对Python岗位需求相对较少,大学生在求职Python相关岗位工作时尽量优先选择一线或者新一线城市,以获取更多的工作机会和更好的发展前景。

图5 Python岗位城市需求分布图

利用Python的jieba分词,再通过WordCloud将招聘岗位高频词进行词云化(如图6所示),根据词云图生成原理,词语显示规格越突出、距离中心位置越近,词语出现频率越高[6],从词云图可以看出用人单位对Python开发工程师、中高级工程师、后端开发工程师以及研发工程师的需求量较大。进一步通过饼状图分析,可得出各招聘岗位所占比例,其中Python开发工程师占44%,中高级工程师占15%,后端开发和研发工程师分别占13%和9%,说明开发和研发类的岗位需求量较大,建议在校学生多学习了解开发工程师所需的技能和要求,以获得更多的工作机会。爬虫工程师、实习生、Python讲师所占比例较小,爬虫工程师的需求远小于开发工程师原因可能在于纯爬虫的岗位需求越来越少,建议大学生在学习爬虫时要更多的与数据挖掘、数据分析相结合,提高综合竞争力。

图6 Python岗位数量占比及词云图

为进一步了解Python各岗位薪资水平,对最低工资均值以及最高工资均值进行分析。从图7薪资水平折线图可以看出,Python相关岗位除了实习生的工资水平较低以外,总体来看其他岗位薪资水平较高。中高级工程师薪资水平最高,其次是运维/测试工程师、后端开发及研发工程师,爬虫工程师和讲师的薪资水平相对较低,推荐求职者在找工作时可先考虑招聘范围较广的Python开发工程师,在工作中不断积累经验提高能力,向薪资水平较高的中高级工程师过渡。

图7 Python岗位薪资水平折线图

4 结语

本文通过分析招聘网站网页结构,利用Python语言及其强大的第三方库编写流程代码,获取相应的就业信息,并对收集到的数据进行清洗整理及分析,结合可视化图表及词云图了解Python相关岗位的学历要求、城市需求量、岗位分布情况以及薪资水平等,有效的降低了求职者手动翻页浏览招聘信息的时间成本,分析结论能够为求职者提供参考意见,同时也为在校学生提出了学习方向及侧重点的相关建议。本文的不足之处在于只获取了单个网站的就业信息,下一步的重点将放在如何进行多数据源的就业信息获取,以获得更加全面的就业信息。此外,本文主要针对个人求职者,因此,只是在获取就业信息之后进行了简单的统计分析;而对于高校管理者,如何在获取海量的就业信息之后为学生实现个性化的就业信息推荐,则需要借助一些大数据分析技术。

猜你喜欢
爬虫薪资工程师
利用网络爬虫技术验证房地产灰犀牛之说
环保工程师:生来为了“拯救地球”
不简单以“住房薪资”引才——遵循“一步一重天”的人才发展规律
基于Python的网络爬虫和反爬虫技术研究
基于Scrapy框架的分布式网络爬虫的研究与实现
谁抢走了低价机票
我想做一名桥梁工程师
开心一刻