基于Python 爬虫的招聘数据可视化分析
2024-01-23蔡文乐秦立静
蔡文乐,秦立静
(甘肃农业大学 信息科学技术学院,甘肃 兰州 730070)
0 引 言
近年来各个高校毕业人数增多,面对各类网络招聘网站繁杂纷呈的招聘信息,毕业生常常要花费大量的时间和精力筛选,如果毕业生可以根据自身需求,直观地了解到各个行业的岗位特征和变化趋势,将有利于求职者快速做出选择[1]。本文实现的招聘网数据可视化分析系统主要利用基于Python语言开发的高级Web 框架Django,整个系统架构可以分为数据的爬取、数据的预处理、数据的存储、数据的可视化分析。
1 系统介绍
本文设计的系统功能模块如图1 所示。首先,通过Python 的爬虫框架,利用爬虫技术实现对目标网页的爬取;对网站的URL 发出请求,在URL 接收到请求并返回结果后进行分析,通过Python 的BeautifulSoup 解析库对系统所需要的数据信息进行解析;然后以CSV 文件的形式保存,主要提取返回结果中的薪资水平、工作经验、学历程度、公司规模、公司名称等相关信息;其次,对数据进行处理,将导入到系统的数据文件进行读入,连接MySQL 数据库,再对数据进行增删改查。在目标网页上爬取相应的数据信息过程中,爬取到的数据信息中必然会存在一些重复冗杂的数据,是因为在运行爬虫程序的过程中会出现反爬虫机制,因此要实现数据去重、删除文件空值行数据等操作;最后,数据分析是整个流程中最重要的阶段,主要是将上一阶段经过清洗处理的数据按照一定的规则方法进行分析处理,为之后的可视化展示提供数据支撑[2]。以可视化的形式去展现对所得数据信息分析的结果,主要采用Python 开发语言去实现结果的表达,读入获取的数据文件并进行统计分析,将分析的结果进行保存;连接相应的数据库,HTML 页面接收到相应的数据信息,并在HTML 页面中使用相应的语法程序将结果数据动态添加到相应的柱状图、饼图等图表中。
图1 系统功能模块
2 相关技术
2.1 Scrapy 爬虫
网络爬虫技术是通过编写计算机爬虫程序,按照一定的规则,爬取目标网页的数据信息。采集有价值的数据,过滤掉无效的数据,得到充足的数据资源,用于进行一系列相关项目的研究和分析。爬取目标网站的招聘信息,对网站的URL 发出请求,得到URL 的返回结果并进行分析,部分代码如下:
2.2 MySQL 数据库
关系型数据库管理系统MySQL,是Oracle 旗下的产品,开发公司为MySQL AB,在当前盛行的数据库中占据一席之地,在Web 应用方面是最好的RDBMS 应用软件之一。关系数据库中的数据并不是放置在一个大的数据仓库,而是放在不同的表中,因此这样的方式加快了处理速度并提高了灵活性。
2.3 Django 框架
Django 的程序编写由Python 来实现,是一个开放源代码的Web 应用框架,也是Python 编程语言驱动的主要来源。Django 架构能够快速方便地创建出高品质、易维护、数据驱动的应用程序。除此之外,Django 还具有强大的可扩展性,这是因为它具有功能强大的第三方插件。Django 框架的设计模式与MVC 的设计模式异曲同工,称为MTV。MTV 就是Model、Template 和View 三个单词的简写,分别表示模型、模版和视图[3-4]。由于在Django 里面更加关注模型(Model)、模板(Template)和视图(Views),因此使用Django 框架会大大提高工作效率。
2.4 Selenium 应用测试
Web 程序的测试主要采用Selenium 在浏览器中进行。首先启动浏览器后,Webdriver 会将浏览器绑定到特定端口作为Remote Server;创建Sessionld 是由客户端借助ComandExecutor来实现的,同时发送请求给Remote Server;Remote Server 在收到请求后,调用Webdriver 进行操作,并将响应的结果返回给客户端。
3 系统实现
3.1 数据采集模块
为了能够快速获取到目标网页的数据信息,实现数据信息的分析和可视化,所以在数据采集模块主要采取的是网络爬虫技术。本文系统需要的数据量大,一般的爬取技术爬取数据信息的效率低下,而且容易遭受反爬虫机制。因此,本文系统的实现主要采取Scrapy 分布式爬虫框架。Scrapy 框架是基于Python 实现爬取Web 站点、提取结构化数据的应用框架,可用于数据挖掘、数据监测、自动化测试等,具有结构简单、灵活性强、高效迅速的特点[5-6]。本文选用BOSS直聘网站进行相关数据的获取。数据爬虫的基本流程主要为发起请求、解析内容、获取响应的内容以及数据保存。数据的采集过程就相当于用户在网页上对自己所需要的数据进行搜集。
(1)确定爬取对象
本文主要实现对BOSS 直聘网站的相关数据进行爬取,爬取数据信息的主要内容包括薪资、工作经验、学历要求、公司名称、所在行业、岗位要求、公司地址等,将爬取的数据进行预处理,最后实现数据分析。
(2)分析网页结构
网络爬虫并不会对所需网页的界面进行一系列的操作,只需要模拟人工去访问所需的网页。因此,爬虫之前对所需网页结构的了解是必不可少的一个步骤。利用浏览器自带的开发者工具对爬取网页进行深入挖掘和分析,了解各个信息元素之间的异同点。最后实现网络爬虫程序的编写,需要查看网页HTML 的代码,对所需数据信息进行核查。
(3)编写Scrapy 爬虫程序
发起请求、解析信息、获取响应内容和存储数据是爬虫框架的基本流程。首先,HTTP 向目标站点发起Request 请求后等待服务器的响应,如果服务器的响应是正常的,则会得到一个Response,这个Response 中包含了获取到网页的数据信息,这些数据信息的类型可能有HTML、JSON 字符串、二进制数据等多种类型,并且保存的方式多样化,可以是纯文本形式,也可以保存至数据库。
基于Scrapy 爬虫框架的招聘数据信息可视化系统,主要由配置文件settings.py、主程序文件spiderMain.py等文件组成。其中,对抓取到的目标网页数据信息和数据结构的分析主要通过数据字段的文件来实现,并且相应的数据字段是通过scrapy.Field()方法建立的。如图2 所示是爬取到的部分信息。获取到所需的部分岗位信息后进行存储,如WorkExperience 存储工作经验、Salary 存储工作薪资等,部分代码如下:
图2 爬取数据
3.2 数据的存储与处理模块
通过网络爬虫技术能够采集到多样化的网页数据,但同时也存在各种各样的问题,如数据缺失、冗余、重复、不一致﹑数据结构错乱等。如果对原始数据没有进行处理而是直接进行分析,不仅会使数据决策的效率受到影响,甚至会出现直接决策的错误。因此,在系统的实现过程中,对原始数据的处理成为了至关重要的问题,原始数据中可能会存在数据的缺失、重复等问题,需要对获取到的数据信息进行相关的预处理操作,最后提供给Hive 进行统计和分析。
在本文系统的搭建过程中,将数据导入使用Python 编写的Pandas 库的DataFrames 中,从而对数据进行数据清理,将重复无用的信息排查出去,并且对数据进行分类整理、聚类分析[7-8],如图3 所示。将所获取到的每一条岗位信息,按照一定的规则处理完成之后,存储在MySQL 数据库中,包括工资、学历、工作经验等。最后将处理得到的数据保存为CSV文件,同时筛选出有价值的数据信息以可视化的方式展现。
图3 数据库分类
3.3 数据的可视化分析模块
数据可视化是一个比较抽象的概念,它的范围在不断地扩大,主要是从数据中抽象出信息,以一种清晰且简单明了的方式展现出来。同时也是信息沟通的最有效手段。数据可视化分析主要就是将预处理后的原始数据使用一些比较有特色的技术方法,如图形图像处理、计算机视觉以及用户界面,通过一定的表达、建模以及对表面、立体、属性和动画的显示,以更加清晰的可视化方式呈现。数据可视化的主要目的在于:使用简单的图形图像,更加清晰有效地传达和沟通所获取的数据信息。
此系统主要采用Python 的Django 框架对前端页面进行设计,可视化图表展示部分的实现采用EChart。EChart 是一个具备强大功能和强兼容性的可视化库,会通过散点图、饼图、折线图和不同频次的词云图等可视化方式为求职人员清晰地展现招聘信息,使求职过程变得更快速高效。以下的可视化结果分析均以分析C 语言工程师岗位为例。
3.3.1 薪资情况
如图4 所示,从薪资分布可以看出,计算机类行业的薪资待遇在高薪资职业中占据一定的地位,此类行业普遍薪资水平较高。薪资在0 ~1 万元和4 万元以上的人数所占比例较少,大多数求职者的薪资维持在1 ~2 万元、2 ~3 万元和3 ~4 万元之间,趋于一个稳定的状态。薪资的高低与求职者自身所具备的能力水平直接相关,也与该公司的价值有关,因此薪资是求职者所看重的一个非常重要的方面。
图4 薪资分布
3.3.2 岗位需求
互联网时代,我们被各种各样的数据所包围着,为了更快地将有价值的数据提取出来,并且很好地去利用这些数据,因此必须先通过计算机相关技术去处理这些冗杂的数据。随着互联网、大数据等公司越来越多,计算机行业的岗位在大学生求职中也越来越热门化。以C 语言工程师岗位为例,如图5 所示为行业求职岗位数量图,可以看出计算机软件行业所占的比例高于其他行业,当前计算机行业处于一种竞争激烈的状态。
图5 行业求职岗位分布
以C 语言工程师岗位为例,如图6 所示,互联网类的公司人数处于两个边缘,1 000 人以下的小型公司一般为大学毕业者创业的小型公司或者其他初创公司等,这些公司中100 人以下的公司所占比例较大;1 000 人以上的大型成熟稳步发展的公司中,10 000 人以上的公司所占比例最大。每一个公司的成员构成也体现出公司规模的大小、工作效率高低以及内核的成熟度等。因此公司规模的大小也是求职者寻找目标公司时所重点关注的一个方面。
图6 公司人数分布
3.3.3 城市分布
如图7 所示,C 语言工程师人数主要分布在比较发达的一线城市,如北京、深圳等。原因在于这些城市的互联网行业发展较好,求职者选择这些城市会有较好的发展。
图7 C 语言工程师地域分布
3.3.4 福利水平
以C 语言工程师岗位为例,如图8 所示,可以看出在求职者所关注的众多福利待遇之中,节日福利、年终奖、五险一金出现的频次较高,这些对求职者来说都是最基本的保障;同时,带薪年假、员工旅游和定期体检等也是人们求职过程中所关心的。求职者在求职的过程中非常关注目标公司给员工创造的基本福利保障,同时各种福利保障也是激励就业者创造工作业绩、促进公司提升的重要手段[9-10]。
图8 求职者关注的公司福利
3.3.5 公司名称
如图9 所示,随着互联网、大数据的热度越来越高,互联网公司越来越多,很多公司名称中都会出现“科技”“信息”“软件”等词汇,并且出现频次很高。可以看出,近年来信息科技公司已经逐渐发展起来,尤其是在上海、北京等一线城市分布得更为广泛。
图9 公司名称
4 结 语
随着网络科技的高速发展,传统的招聘方式已经不再适合企业和人才的需求。本文设计开发出一种基于网络爬虫的招聘信息数据可视化分析系统,通过此系统能够筛选出有价值的招聘信息,使得求职者在求职的过程中对自己的岗位有清晰的认知和定位。本文所实现的招聘数据可视化分析系统,主要利用Python 爬虫框架实现所需网页数据信息的获取,对采集到的原始数据进行预处理操作;然后采用Hive 针对薪资分布、行业数量、公司人数、城市分布,以及公司福利和名称出现频次进行统计及分析;最后通过ECharts 将采集到的信息以各类图表和词云图的方式进行可视化展现,让求职者更加直观地看到各类分析结果,清楚地了解求职现状,为求职者提供了一个更好的求职分析平台,帮助求职者在求职的过程中找准自身定位,及时调整求职策略。