基于Python爬虫技术的招聘信息数据可视化分析

2024-05-19 04:10付腾达李卫勇王士信许佳鲁春燕
电脑知识与技术 2024年7期
关键词:网络爬虫数据可视化

付腾达 李卫勇 王士信 许佳 鲁春燕

摘要:基于Python爬虫技术,实现了从BOSS直聘网爬取南昌市与IT行业相关招聘信息的过程。爬虫程序对BOSS直聘网爬取所需信息,并对爬取的数据进行清洗、整理、分析等操作,确保数据的准确性和一致性,随后将数据存储至MySQL数据库中,供后续分析与使用。该系统后端采用基于Python的轻量级Flask框架,前端使用HTML5、CSS3、JQuery、Bootstrap5等技术,此外,还结合了基于JavaScript的Echarts数据可视化图表库,以实现数据到可视化效果的转换。系统可以为广大应聘人员提供有利的决策支持,以帮助他们更轻松地找到合适的岗位信息。

关键词:BOSS直聘;网络爬虫;Flask;数据可视化;Echarts

中图分类号:TP393.09      文献标识码:A

文章编号:1009-3044(2024)07-0077-06

开放科学(资源服务)标识码(OSID)

0 引言

随着互联网进入大数据时代,数据呈指数级增长,由于数据量庞大使查找信息时间周期长、精准度差、效率低,以致想通过网络快速找到符合自己的岗位信息尤为困难。为此,很多研究者开始对招聘数据进行了相关研究,其中毛遂[1]以51job网为例对岗位占比和企业类型、薪资同学历与地区之间的关系进行了分析。丁文浩[2]以前程无忧网为例对城市和岗位平均薪资水平、工作经验、学历情况等进行了分析。王福成[3]以拉勾网为例对高校程序设计语言类的招聘职位地域分布、职位与薪资、学历与技能要求等进行了分析;罗燕[4]对人工智能类的招聘岗位、招聘行业、招聘城市等进行了分析。

本文基于Python爬虫技术,从BOSS直聘网采集南昌市IT行业相关的招聘信息,通过分析与数据可视化图表的展示,为南昌本地应聘者提供决策支持。

1 相关技术

1.1 网络爬虫

网络爬虫是一种自动化程序或者脚本,用于在互联网上自动采集数据。原理是通过HTTP协议向目标服务器发送URL请求,然后根据服务器响应提取所需数据,通常以HTML或JSON等格式呈现。然后使用Python语言结合Pycharm集成开发环境以及一系列库,包括BeautifulSoup库、正则表达式re库、Jieba分词库、WordCloud 模块、JSON模块、lxml解析器及xlwt库,来处理和存储这些数据,以便后续分析。

1.2 Flask框架

Flask是一款轻量级而强大的Python Web框架,专门用于构建Web应用程序和RESTful API。尽管被视为是轻量级Web框架,但它却提供了出色的灵活性和简洁性。Flask还允许开发者自定义URL路由,将URL映射到不同的视图函数,以便处理各种请求。此外,Flask还内置了Jinja2模板引擎,使得HTML模板的渲染变得非常容易,因此备受开发者青睐。

1.3 ECharts可视化库

ECharts是一款开源JavaScript库,专注于创建高级数据图表。它建立在轻量级的Canvas库ZRender之上,提供了丰富多彩的图表类型,主要有折线图、柱状图、散点图、饼图等多种可视化图表。ECharts的架构分ZRender层和ECharts层,这为开发者与数据分析人员提供了强大的可视化功能,使他们能够轻松地在Web页面中创造引人注目的数据可视化效果。因其强大的功能和易实用性,目前已被众多知名公司广泛采用。

1.4 Jieba分词库

Jieba分词库是一款流行的Python庫,专用于中文文本分词。它因高效准确的分词性能而著名,支持多种分词模式,包括精确模式、全模式和搜索引擎模式。此外,Jieba分词库还允许用户自定义词典,以适应不同领域的文本分析需求。因此,它常被广泛应用于中文自然语言处理和文本挖掘任务中。

2 招聘数据爬取与预处理

2.1 招聘数据爬取

设计招聘数据爬虫系统的流程如下:

步骤1:分析URL。

步骤2:访问待爬取的招聘数据。该模块使用requests库请求数据,然后通过BeautifulSoup库下载页面信息,并利用lxml解析器解析数据。

步骤3:将数据存储到CSV文件中。

步骤4:对爬取的数据进行清洗、整理、分析等预处理操作。

步骤5:将经过预处理得到的数据存储到MySQL数据库中。

步骤6:数据分析并可视化展示。

招聘信息爬虫系统流程图如图1所示。

2.2 招聘数据爬分析页面结构

在BOSS直聘网的搜索框中输入“Web前端工程师”职位,页面显示与该职位相关的岗位信息。接着在源代码调试界面中使用“审查”选项,发现待爬取的信息缺失,通过在Network选项界面下的Filter搜索框中输入“JSON”,发现存在名为joblist.json格式的条目。经查看发现,岗位数据存储在该条目文件的“jobList”键对应的值中,其存储着每一页30个职位信息,如图2所示。

2.3 分析URL

通过对页面结构的分析,发现存储真实岗位数据的joblist.json文件URL格式为:“https://www.zhipin.com/wapi/zpgeek/search/joblist.json?scene=1&query=Web%E5%89%8D%E7%AB%AF%E5%B7%A5%E5%85%B7&city=101240100&experience=&payType=&partTime=°ree=&industry=&scale=&stage=&position=&jobType=&salary=&multiBusinessDistrict=&multiSubway=&page=1&pageSize=30”。通过翻页对比分析,发现每页URL中的page参数值随页面变化而变化。

因此,可以构建一个循环来获取与搜索岗位相关的不同页面的URL,并将这些URL地址存储在一个URL列表中,以便进行网址请求和数据爬取操作。

2.4 爬取招聘数据

在进行请求URL过程中,为绕开反扒机制,需要在请求的Headers中添加一个“User-Agent”用户代理,这样代码将会伪装成浏览器的形式获取数据。接着通过使用requesrts库的get()方法发送请求并获取数据,然后使用BeautifulSoup库以及lxml解析器解析数据,进一步使用json.loads()方法将获取的数据转化成JSON格式。经分析发现,真实数据存储在“jobList”键对应的值中,通过以访问字典的方式获取这些数据,即data["zpData"]["jobList"]。然而在“jobList”鍵中所需要待爬取的字段主要有jobName、brandName、cityName、areaDistrict、businessDistrict、jobExperience、jobDegree、salaryDesc、brandStageName、brandIndustry、brandScaleName、skills、welfareList,这些字段分别对应为职位、公司名、城市、地区、商业区、工作经验、教育水平、薪水、品牌舞台、公司行业、规模人数、技能和福利等数据信息。

2.5 数据保存到CSV文件中

本文将爬取的数据存储到CSV文件中。数据存储过程是先使用xlwt库中的Workbook()方法创建一个工作簿,并且在该工作簿对象下使用add_sheet()方法创建一个工作表,通过使用write()方法将所需数据写入到该工作表中,最后调用save('文件路径')将数据保存到CSV文件[5]中。存储在CSV文件中的招聘数据如图3所示。

2.6 预解析数据

由于从BOSS直聘网直接爬取的数据可能存在脏数据,直接使用会影响后续数据分析的准确性和数据可视化效果。因此,使用前需要对这些数据进行预解析操作,以将其转化为有效可靠的数据。预解析数据操作主要包括数据去重、处理空值、数据变换、属性格式化等操作,经过预处理操作的数据可提高数据分析的精确性和可靠性。

1) 数据去重。企业可能会发布相同职位的招聘信息,因此需对重复的招聘信息进行去重操作。通常情况下,一般将“公司名”与“职位”相同的数据视为重复数据,核心代码如下:

df.drop_duplicates(inplace=True)

2) 空值处理。爬取的数据中存在许多空值(Nan)数据,为了确保数据的准确性,采取的处理方法是直接删除包含空值的行数据,核心代码如下:

df.dropna(axis=0, how=”any”)

3) 数据变换。由于数据中“薪水”属性列存在格式不统一的情况,如“***-***K”、“***-***K·***薪”与“***-***/天”。为方便数据管理,现对薪水列进行数据变换[6-8],统一成“***×1000/月”的数据格式。

原始“薪水”属性列是以范围值“a - b”或“a - b·c”的形式存在。因此,可以构造三个新的属性列“最低薪资”“最高薪资”和“平均工资”。在这些范围值前提下,“最低工资”值为a,“最高工资”为b,其中c表示年底多发的薪资部分,即12个月工资+年底多发(c - 12)个月工资,如13薪,表示年底多发1个月的工资。对于按天计算薪水的情况,以一个月工作21天结算工资。对于按小时计算薪水的情况,由于数据量少且对数据分析影响较小,将其删除。经过数据变换有助于标准化薪水数据,以便后续分析。

4) 属性格式化。在joblist.json文件中, 存在名为“技能”和“福利”的属性列,它们以列表的方式存储数据。以“福利”属性列为例,由于不同公司提供不同的福利待遇,导致“福利”长度各不相同,这种不规则性给数据分析带来了一些挑战。因此,需要对“福利”属性列进行数据的规范化处理,以将其转化为更适合进行数据分析的数据格式。

“福利”列属性格式化前,形式如下:

lst = ['员工旅游','定期体检', '餐补','年终奖','住房补贴','节日福利','带薪年假', '免费班车','交通补助','五险一金']

“福利”列属性格式化后,形式如下:

lst = ['员工旅游、定期体检、餐补、年终奖、住房补贴、节日福利、带薪年假、免费班车、交通补助、五险一金']

预解析得到的最终数据如图4所示。

5) 数据保存到MySQL中。系统使用MySQL数据库存储预解析后的数据,创建一个名为“boss”的数据库,用于存储招聘信息,数据库结构见表1。

3 数据可视化

系统最后实现了对BOSS直聘网南昌市与IT类招聘数据的可视化,并将分析结果以图表的形式在前端页面上进行展示。本系统的主要工具包括基于Python Web框架Flask以及开源可视化库Echarts,通过该系统观察招聘数据的相关可视化图表,应聘者可以更加方便浏览招聘信息,为求职者提供了更好的招聘信息可视化平台。

3.1 区域数据分析

通过对南昌市各行政区和这些行政区内各区域的公司数量进行了详细分析,发现一些引人注目的趋势。首先,较为繁华的行政区往往拥有更多的企业,反之企业数量较少。其次,由于交通便捷程度、距离市中心的远近等因素,如进贤县、安义县的公司数量相对较少。

基于上述发现,可以得知,若应聘者选择在繁华的区域或者离市中心较近区域的企业投递简历,拥有更多的机会获得面试资格,并且被录用的概率也会大大增加。该分析结果可以帮助求职者更有针对性地选择投递位置,提高他们的就业机会。如图5所示。

3.2 学历数据分析

通过对青山湖区各个区学历要求的数量分析,可知青山湖区企业对求职者学历层次的需求情况。分析结果显示,对学历要求最多的是大专与本科学历,主要原因是大专与本科生的数量相对较多,企业有更多的选择余地。其次,大专与本科生对薪资要求相对较低,企业可节约一定的投入成本。

此外,企业非常重视求职者的专业技能和实际操作能力,而初中及以下学历的人很难满足相关需求。对于硕士、博士学历的人要求相对较高,企业难以满足这些要求,因此,对高学历要求的企业数量也相对较少。

分析结果有助于求职者更好地了解企业对学历的要求,从而更有针对性地提升自己的就业竞争力。具体如图6所示。

3.3 工资数据分析

1) 青山湖区企业最低工资统计数量分析。通过图7数据分析可知,可知在该区域,提供最低月薪在3K到8K之间的企业数量相对较多,而提供10K以上月薪的企业数量占比相对较少。其原因可能是企业控制投入成本考虑、市场因素、行业标准、经济状况以及员工的教育和技能水平等因素的影响。这些因素共同作用下,导致不同薪资水平的企业数量分布不均。

2) 青山湖区企业最高工资统计数量分析。通过图8中数据分析可知,该区提供最高月薪在8K到12K之间的企业数量占比相对较大。可能是因为这些企业希望吸引行业顶级人才,因此愿提供较高的薪资待遇。此外,某些岗位可能需要特定的专业技能、丰富的经验或高学历背景的人才,这些因素也会导致薪资水平相对较高。因此,这些企业提供了较高薪资的工作机会,吸引了有着较高技能水平和经验的求职者。

3.4 词云分析

词云是一种用来展示词汇出现频率的图形,先使用Jieba库对商业区、公司行业、福利进行分词,以了解它们在数据中的使用频率。接着使用WordCloud库创建词云图呈现词汇统计结果,以更清晰地观察数据。通过对图9的词云分析发现,在求职过程中,应聘者特别关注一些因素,如城市区域、所属行业以及公司待遇。南昌市因其高吸引力而备受青睐,尤其在计算机软件、集成电路和半导体行业。此外,一些新兴地区,如艾溪湖、红角洲和瑶湖也备受关注。福利待遇也是应聘者重点考虑的内容,包括节假日、福利和五险一金等。这些因素在求职中发挥着重要作用,应聘者通过层层筛选,最终找到符合自己需求和兴趣的职位。

4 结论

本文运用Python的Flask框架,构建了一个可视化平台,用于展示从BOSS直聘网获取南昌市与IT行业相关的招聘信息,并进行深入的数据分析。这次分析包括了南昌市各个区域的企业数量、青山湖区各区对学历的要求、最高和最低工资水平、企业所属行业以及提供的福利待遇等多个方面。最终,通过可视化手段将这些分析结果生动地展示,为南昌市IT行业的求职者提供了一个便捷的平台,以帮助他们更轻松地找到适合自己的职位。

参考文献:

[1] 毛遂,毛红霞.基于51job网站招聘信息的爬取与分析——以Python技术岗位为例[J].网络安全技术与应用,2021(4):47-49.

[2] 丁文浩,朱齐亮.基于Python的招聘數据爬取与分析[J].网络安全技术与应用,2022(1):43-45.

[3] 王福成,齐平.基于招聘数据的高校程序设计语言类教育研究[J].池州学院学报,2020,34(6):147-149.

[4] 罗燕.基于Python对人工智能类招聘信息的爬取与分析[J].石家庄职业技术学院学报,2022,34(6):9-17.

[5] 马宁,陈曦,张李铭.基于Selenium与Openpyxl的Web脚本自动化设计研究[J].电脑知识与术,2020,16(1):51-53,70.

[6] 殷丽凤,张浩然.基于Python网上招聘信息的爬取和分析[J].电子设计工程,2019,27(20):22-26.

[7] 张嘉威,关成斌.基于Python和Selenium的智联招聘数据的爬取与分析[J].软件,2022,43(8):170-175.

[8] 程俊英.基于Python语言的数据分析处理研究[J].电子技术与软件工程,2022(15):236-239.

【通联编辑:王 力】

猜你喜欢
网络爬虫数据可视化
移动可视化架构与关键技术综述
大数据时代背景下本科教学质量动态监控系统的构建
可视化:新媒体语境下的数据、叙事与设计研究
炼铁厂铁量网页数据获取系统的设计与实现
我国数据新闻的发展困境与策略研究
基于R语言的大数据审计方法研究
基于社会网络分析的权威网页挖掘研究
主题搜索引擎中网络爬虫的实现研究
浅析如何应对网络爬虫流量
网络爬虫针对“反爬”网站的爬取策略研究