基于Python的招聘网站爬虫及可视化的设计与实现

摘要:现在,随着互联网网络的飞速发展,人们获取信息的最重要来源也由报纸、电视转变为了互联网。互联网的广泛应用使网络的数据量呈指数增长,让人们得到了更新、更完整的海量信息的同时,也使得人们在提取自己最想要的信息,过滤掉对自己无用的信息时变得不那么容易,对于应聘者也是如此。由于招聘网站的日益流行,也使得应聘网站成为了应聘者找工作的主要平台。在面对着大量的招聘信息时,就业者不能一目了然的获取自己想要的招聘信息,因此我们需要对海量的招聘数据进行处理,做出一种招聘信息的分析系统。在此基础上本文介绍了基于Python的招聘网站的爬虫及可视化的设计与分析过程中的技术线路。

本招聘网站的爬虫及可视化使用Python语言编写,使用基于Flask的轻量级Web应用框架,数据库使用MySQL,使用ECharts进行数据可视化部分的显示。对数据的爬取使用的Requests进行爬取数据,本次爬取的招聘网站为拉勾网搜索关键词为Java、Python、Php的招聘信息,拉勾网具有较强的反爬虫机制,采用Cookie形式进行封装,再进行数据的获取。在MySQL数据库中存储爬取的招聘信息,用Pymysql包连接MySQL数据库将查询的数据使用ECharts框架展示到网页。

通过本系统可以用户可以了解到职位的信息概况、薪资分布情况、企业主要招聘城市情况和企业的规模分布、职位的福利待遇和对应聘者的学历要求,工作经验的要求。

关键词:Python爬虫;数据可视化;招聘网站

引 言

随着互联网的不断发展,网络招聘也更加普遍。招聘网站能使招聘者随时随地了解到招聘信息,同时提高企业招聘的速度。但是面对着大量的招聘信息,应聘者难以在很快的时间内找到适合自己的岗位,做出适合自己选择,也不能根据这些信息直观的看到应聘者比较关心的薪资状况分布,企业的主要招聘城市,公司福利和所要求的学历与经验等方面。因此,当下需要一个能够把招聘信息整合到一起并将信息可视化显示的系统,这样用户就可以通过该平台来进行查看招聘信息的薪资分布,企业福利,所在城市等,从而使求职者可以更快找到心仪的工作。

目前,基于网络爬虫的招聘职位可视化系统在国内外比较少见,有提供该平台的搜索引擎如百度、谷歌等。但是因为招聘网站的招聘信息不能够随意转载,并不能获取到全面的招聘信息,且做不到可视化的效果。因此基于Python的招聘信息的爬虫及可视化系统还没有比较成功的案例。

所以,本文通过对拉钩网Java、Python、Php相关岗位的公司名称、招聘城市、岗位名称、薪资待遇等进行爬取,然后将招聘信息存入数据库,使用ECharts可视化图表将招聘信息以柱状图、折线图等形式展现出来,供用户个性化的获取信息。让计算机相关专业应聘者根据自身优势有选择性的应聘岗位。为广大的社会择业人员和初入社会的应届毕业生提供就业和学习的指导方向。

第1章 课题概述

由于近些年互联网的飞速发展,我们所生活的世界正在被数据所淹没,人们面对大量的数据需要从大量数据中快速地提取有效的自己需要的信息。对于求职者来说当查看招聘信息时也是这样,面对招聘网站展示的大量的职位信息,应聘者难以及时选出自己最想要的职位信息,又或者筛选出信息后不能直观地看到招聘所有信息的特征、规律、变化的趋势或者数据之间潜在联系。我们可以借助计算机技术来进行自动获取筛选分析自己想要的职位信息。本文对于基于Python的招聘网站的爬虫及可视化的课题研究就显得尤为重要了。

1.1 课题内容

该课题研究的是一种基于Python的招聘网站的爬虫及可视化的系统。在开发过程中利用Python对招聘信息进行收集和分析。首先,在拉钩网站上爬取招聘信息,然后存入数据库,连接数据库将数据库中的招聘信息从地区、行业、专业、公司规模、要求经验、薪资待遇等维度进行数据分析。最后,利用ECharts可视化技术,将有效的数据展示给用户。

1.2 课题背景

近年来随着我国计算机水平的发展,计算机行业的热门,高校也都相继开设了相关课程,越来越多的计算机人才涌入社会,但市场中的一众岗位让人眼花缭乱,同时众多拥有丰富从业经验的从业者,名牌大学与普通院校毕业生共同竞争,致使很多社会中的求职者面临着就业的困扰,而如今的招聘网站信息多,想要获取有效的信息需要的时间太长。为了解决社会二次择业人员和高校应届毕业生获取符合自己的并符合自己意向的招聘岗位信息,利用Python对这些招聘信息进行收集和分析势在必行。所以需要一种能够具有分析岗位优势,薪资分布等的系统,可供求职者利用自身优势,分析岗位信息,从而尽快找到心仪的岗位。

通过综合运用互联网数据爬虫技术和图表可视化库,对招聘网站的招聘信息进行爬取,并进行了相关统计分析,从地区、行业、薪酬、经验、岗位素质等方面进行综合分析。从而帮助计算机行业想从事Java、Python、Php相关岗位的就业人员了解相关领域的岗位需求和薪资情况、企业招聘城市、招聘企业的规模和学历与工作经验要求等。从而为就业人员的快速选择岗位,在何处选择岗位提供参考,对未来的生活和工作、学习规划等明确方向。

1.3 课题意义

对于即将毕业找工作的应届生和社会择业人员来说,上网快速找到合适的工作,无疑是急需的。而如今的招聘网站信息多,面对着网上形形色色的招聘网站和参差不齐的招聘信息,想要获取有效的信息需要的时间太长,这给就业者根据自身的情况选择自己适合的职业带来了困难。针对以上不足,有必要通过爬虫技术,帮助求职者在杂乱无序的数据中寻找有用的数据,科学分析,缩短求职者找工作的时间成本,帮助求职者快速择业。

本系统爬取了拉勾网站的计算机语言相关多种招聘信息,同学们可以通过选择本身应对的学历和想要的招聘岗位来选择查看相应的招聘信息。同时将这些信息可视化,可以方便同学们快速了解公司需求情况,这些可视化的部分包括薪资情况,企业情况,公司福利情况和学历情况。

1.4 运行环境

开发环境:Pycharm

开发语言:Python+JavaScript+ SQL

后台数据库:MySQL

开发环境运行平台:Windows 7/Windows10

1.5 相关技术

本项目是使用Python语言开发编写。使用request包进行对招聘网站的数据爬取;用Pysql连接数据库,获取数据;使用Flask框架将数据返回给前端,用ECharts对数据进行可视化展示,使用Jieba分词将语句分开。

1.5.1 Python语言

Python是由其他多种语言发展而来的脚本语言。Python具有很强的可读性,比其他语言更容易上手,并跳过了编译的过程,不需要使用编译器。Python语言是交互式的,我们可以直接运行代码。Python支持面向对象的风格或者将代码封装在对象的编程技术,是一种面向对象的语言。Python语言非常适合新手学习,因此作为计算机学生,在步入大学后,专业课程开设的第一门课就是计算机导论——以Python为舟,可见Python对于初级程序员来说是一种伟大的语言。

爬虫一般来说就是进行网络资源抓取,因为Python脚本特性,Python容易配置,对字符处理十分灵活,Python有着丰富网络抓取模板,让两者可以很好的链接在一起。对比其他静态编程语言来说,Python抓取网页文档接口更加简洁。抓住网页有时候需要模拟浏览器的行为,而Python具有很多第三方包。

1.5.2 Flask框架

Flask是一种使用Python开发的Web框架,可以说是以Werkzeug和Jinja2模板为核心。Flask相当于一个内核,是一个非常简单的框架且易于扩展。

Flask调用视图函数后,会将视图函数的返回值作为响应的内容,返回给客户端。一般情况下,响应内容主要是字符串和状态码。当客户端需要访问信息时,通常通过浏览器发起HTTP请求。Werkzeug预处理接收的HTT请求进行路由分发,根据URL请求,找到具体的视图函数。Flask框架处理接收的请求,在Flask中,通常是用Flask程序实例的Route装饰器来实现路由。调用视图函数,获取响应数据后,把数据传入HTML模板文件中,使用Jinja2模板渲染响应数据,然后由Flask返回响应数据给浏览器,最后浏览器处理返回的结果显示给客户端,Flask请求响应图,如图1-1所示。

图1-1 Flask请求响应

1.5.3 ECharts图表库

ECharts是一款使用JavaScript实现的开源的数据可视化图表库,可以提供直观的,可交互的数据可视化图表。本招聘网站的爬虫及可视化系统使用ECharts做出薪资待遇的柱状图和饼图、折线图的分布展示,公司分布所在城市的饼状图展示,公司规模状况的柱状图和折线图的展示,对学历和工作经验要求的条状图和矩形树图的展示。ECharts通常数据设置在SetOption中,如果我们需要异步加载数据,可以配合 JQuery等工具,在异步获取数据后通过SetOption填入数据和配置项就行。

1.5.4 Jieba库

Jieba库是一款Python的第三方中文分词库,Jieba支持三种分词模式:精确模式、全模式和搜索引擎模式。精确模式是将语句最精确的切分,这样不存在冗余数据,可以做文本分析。全模式是将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余数据。搜索引擎模式是在精确模式的基础上,对长词再次进行切分。

1.5.5 Pysql包

Pysql具有历史,完成和行编辑等功能。具有高级功能(搜索表,索引,计数,说明计划,会话列表等),为屏幕和文件提供适当的输出(CSV可以包含在电子表格中),支持用户定义的SQL,后台查询,模式数据模型,对象依赖项,PL / SQL包函数调用树的图形输出,等等。在可视化需要数据连接查询后台数据库时,需要使用Pysql包进行连接。

1.6 本章小结

本章主要介绍招聘信息的爬虫及可视化在设计时所使用的软件Pycharm和Mysql以及平台背景,和介绍本次毕业设计所涉及到的一些技术和技术的相关内容并且阐述了课题意义,讨论了课题背景。为后面的招聘网站的爬虫与可视化系统的设计部分以及系统实现部分打下了坚实的理论基础。

第2章 系统设计

本招聘网站的爬虫及可视化系统使用的是Python语言编写,采用基于Flask的轻量级Web应用框架,招聘信息的存储数据库采用MySQL设计,使用ECharts进行招聘信息的数据可视化显示。

2.1 设计思想

首先使用Request爬取拉勾网网页,分析拉钩网网页,将内容进行解析后将招聘信息写入数据库,当我们需要查询信息时,需要连接数据库,将信息查询后读取并写入字典,使用ECharts框架,将数据传输到前端网页,以饼状图,柱状图,折线图等形式展示,让用户直观的看到招聘信息的地域,薪资,待遇等分布,让用户直观的获取到最关心的招聘信息。

2.2 需求分析

随着互联网时代的不断发展,各行各业的数据都呈现极为夸张的增长态势,面对毕业找工作,网上有形形色色的招聘网站,招聘信息也参差不齐,这给毕业生和二次择业人员如何根据自身情况选择自己适合的职业带来了困难。

本人想设计一个网站,爬取招聘网站的有关Java、Python、Php这三种语言相关职位的信息,然后将这些信息综合,方便同学们可以通过选择学历和想要的招聘职位来选择查看相应招聘信息。同时将这些信息可视化,方便同学们快速了解公司需求情况,可视化的部分包括薪资情况,企业情况,公司福利情况和学历情况。此系统的主要功能需求如下:

1.数据概况

爬取的所有有关Java、Python、Php语言的岗位招聘数据都可以看到,也可以通过学历和职位来选择查看满足条件的招聘信息,可以选择学历要求、输入职位来搜索更加精准的职位。

2.可视化

薪资情况:通过选择学历来查看各种岗位对于不同学历的薪资可视化情况,以柱状图、饼图的形式来展示各种职位的薪资分布、所占比例,提供给用户在找工作是作为参考。

企业情况:通过选择职位可以来查看这个职位的主要招聘城市,还可以大概查看一下这个职位的公司规模情况,以及每个职位在各个主要城市所占的比例饼图。

福利情况:通过数据可视化速览公司福利,基于词云进行构造,可以清晰看出所有公司给出的最核心的福利待遇。

学历情况:可以查看各个职位对学历以及工作经验的要求,以条形图、矩形树的形式进行可视化展示。

2.3 系统可行性分析

对于本系统可行性的分析主要从与系统开发和实际生活息息相关的技术、经济、社会三方面进行分析。

1.技术可行性

对于技术可行性首先要想到如何运用当前的技术手段可以成功地完成系统开发设计的工作,还要考虑设施以及配置能否契合开发的需要等。本次要开发的招聘数据采集分析网站系统用的是Python开发语言,容易编写,可以直接在服务器上执行端口。并且使用Pycharm可以快速创建项目。在软件方面:由于使用B/S模型的相对成熟的开发软件,所以软件开发平台的可行性。并且ECharts图表库也已非常成熟且完善,所以其技术可行性非常之高。

2.经济可行性

Python是一款开源免费的脚本语言,Pycharm开发环境也有免费的社区版,而且ECharts也是一款优秀的开源的图表。因此开发成本几乎可以忽略不计,因此经济可行性非常高。

3.社会可行性

本系统的开发符合国家法律进行,也不会触犯到任何人,任何集体的法律权益。只要开发过程中遵纪守法就完全符合法律要求,并且使用计算机的用户都会具有一定的计算机基础,并且本系统操作方法简单,分析的均为计算机相关方面的岗位信息,用户群体也都是计算机方面的人才,所以用户绝对能够熟练使用该系统,并且普通会使用计算机的人群也能使用。因此社会可行性很高。

2.4 功能设计

本项目要对系统功能结构进行设计、系统功能模块爬取网站信息及存入数据库和数据可视化设计、画出系统完整的流程图。

2.4.1系统功能结构

该系统实现了数据的概览,薪资情况,企业情况,福利情况,学历情况及薪资预测的可视化。系统功能层次图,如图2-1所示。

图2-1 系统功能层次图

2.4.2系统功能模块设计

本程序使用Python语言编写,使用的是Flask轻量级Web应用框架,数据库采用MySQL设计,使用百度开发的开源的ECharts图表库进行数据的可视化显示。招聘信息数据的爬取使用Requests进行,爬取的招聘网站为拉勾网,拉勾网有较强的反爬机制,所以采用Cookie的形式进行封装,再进行数据获取。获取的招聘信息数据存储到MySQL数据库,然后使用Pymysql包连接MySQL将查询的数据展示到页面。系统提供了如下功能:

1.数据爬取功能

程序模拟浏览器访问招聘网站信息获取响应Json,提取其中招聘岗位的所有数据,并将这些招聘数据进行存储。系统爬取流程图,如图2-2所示。

图2-2 招聘信息爬取流程图

  1. 数据展示概况

可以通过学历和职位来选择查看满足条件的招聘信息,可以选择学历要求、输入职位来搜索更加精准的职位。

3.数据可视化

通过连接数据处理获取职位信息后,将职位信息传输到ECharts前端框架里。

在前端网站框架里放入连接数据后的ECharts将各种相关职位的薪资分布情况以柱状图、饼图的形式来展示。

将相关职位的主要招聘城市以所占的比例饼图形式展现;将公司企业的规模分布以折线图,柱状图的形式展示。

通过数据可视化,基于词云进行构造,生成公司福利词云和职位福利词云,展示所有公司给出的最核心的福利待遇。

可视化展现各种岗位对于不同学历和不同经验的薪资情况,以柱状图、矩形树的形式进行可视化展示。

2.4.3系统流程图

用户登入系统后,通过连接数据库,对招聘信息进行获取,将信息传输到ECharts图表里对三种语言相关岗位招聘信息进行可视化的展示。可视化展示流程图,如图2-3所示。

图2-3 可视化展示流程图

2.5 数据库设计

数据库存储爬取的所有招聘信息数据。在MySQL里创建招聘信息表,存储爬取的招聘公司的全称,招聘职位名称,职位福利,薪资,学历要求,所在城市等信息。

当可视化界面展示数据时,查询数据中所有的相关招聘信息。招聘信息数据表,如表2-1所示。

表2-1 招聘信息数据表

字段名

数据类型

备注

companyFullName

Text

公司全称

companyShortName

Text

公司简称

companySize

Text

公司规模

financeStage

Text

融资阶段

district

Text

区域

positionName

Text

职位名称

workYear

Text

工作经验

education

Text

学历

salary

Text

薪资

positionAdvantage

Text

职位福利

industryField

Text

经营范围

firstType

Text

职位类型

companyLabelList

Text

公司福利

secondType

Text

第二职位

city

Text

城市

2.6 本章小结

本章对基于Python的招聘网站的爬虫及可视化系统进行了设计思想的阐述,表述了招聘网站可视化的需求分析。对系统可行性进行分析,包括技术、经济、社会。以及详细的功能设计,包括系统功能结构设计、系统功能模块爬取网站信息及存入数据库和数据可视化的设计、系统完整流程图。最后介绍了数据库创建的表及其属性。为接下来的招聘网站的爬虫及可视化的详细实现打下基础。

第3章 系统实现

本章在前文对于本招聘信息爬虫及可视化系统的需求分析以及详细的爬取流程分析和数据可视化分析的基础上对数据可视化系统的实现做出详细的介绍。对岗位信息的爬取的技术讲解和部分代码、数据处理、数据库功能实现以及ECharts可视化进行详细介绍。

3.1 岗位信息爬取模块设计

通过浏览器搜索拉勾网,在拉勾网站点击鼠标右键的检查功能查看招聘信息的源代码分析网页,拉勾网的职位信息是通过Ajax动态加载的,由于拉勾网反爬机制,我们并不能通过爬虫在爬取的源代码里获取职位的相关信息,所以我们在检查功能的Network里点击XHR查看标头。在爬取数据的过程中,从指定的url中通过Requests请求携带标头里的请求标头和表单数据模拟浏览器访问网页获取网页中的JSON信息。

对招聘信息的获取使用Requests进行爬取拉勾网的招聘岗位信息,由于拉勾网的反爬机制,所以采用Cookie的形式进行封装,再进行数据获取。数据爬取的部分过程,代码如下:

#创建session会话

s = requests.Session()

#模拟浏览器发送请求 s.get(url=url1, headers=headers, timeout=3)

#获取cookie cookie = s.cookies

#发送post请求 res = requests.post(url, headers=headers, data=data, cookies=cookie, timeout=3)

#检查请求是否成功 res.raise_for_status()

#设置可接收的编码为utf-8 res.encoding = 'utf-8'

#请求响应结果 page_data = res.json()

访问拉钩网站,登录需要Cookie,将Cookie保存在Session里。创建Session连接,获取服务器的响应结果。获取响应,如图3-1所示。

图3-1 获取响应

通过分析网页源代码可以看到浏览器发送的请求得到的响应,从JSON里可以读取总职位数TotalCount,代码如下:

first_page = get_json(url, 1) total_page_count = first_page['content']['positionResult']['totalCount']#获取json里的总相关职位数 num = get_page_num(total_page_count)#算出爬取的页数

通过从浏览器上登录拉钩网站可以看到拉钩网的招聘信息每页显示15个职位,最多可以显示30页,所以最多能爬取30页信息。爬取总页数的代码如下:

def get_page_num(count): page_num = math.ceil(count / 15)#总职位数除以每页的招聘岗位15个 if page_num > 30: return 30#如果页码超过30只返回三十页码职位 else: return page_num#如果页码不超过30页,那么返回爬取的总页码数

将页数循环访问并获取响应JSON里职位相关的内容,最后将职位信息汇总到总列表total_info中,因为拉钩网站的反爬机制,所以每次爬取一页数据后都需要都需要暂停一段时间后再继续爬去,获取职位信息代码如下:

total_info = [] time.sleep(10) for num in range(1, num + 1): # 获取每一页的职位相关的信息 page_data = get_json(url, num) # 获取响应json jobs_list = page_data['content']['positionResult']['result'] # 获取每页的所有相关的职位信息 page_info = get_page_info(jobs_list)#将每页的职位信息写入列表

for item in page_info: print(item) total_info += page_info print('已经爬取到第{}页,职位总数为{}'.format(num, len(total_info))) time.sleep(20)

将网站每页的岗位信息从响应的Json里获取的职位信息显示出来,职位信息列表,如图3-2所示。

图3-2职位信息列表

爬取所有数据,看看有没有之前已存入的信息,如果没有再写入,这样可以筛选之前爬取过的重复的岗位招聘信息,或者不同语言关键词同时能搜索到的相同岗位信息,更新数据表代码如下:

def unique(old_list): newList = [] for x in old_list: if x not in newList : newList.append(x) return newList

3.2 数据库的连接及使用

爬取的所有职位信息都需要存入数据库,每次对数据化进行可视化展示时连接并查询数据库里相关的职位信息。

3.2.1连接数据库

在MySQL中用创建数据库表,将爬取后的获取的数据保存到数据库。每次可视化的展示都需要连接数据库获取相关的信息,获取列表里的所有相关信息后就要关闭连接,代码如下:

conn = pymysql.connect(host='localhost', user='root', password='123456', port=3366, db='lagou',charset='utf8mb4')#建立数据库连接

cursor = conn.cursor()#中间是查询所需要的各种招聘信息

count = cursor.fetchall()#取消连接

3.2.2 数据概览数据库查询

在可视化过程中,我们需要载入数据,而这些数据保存在MySQL数据库里,所以就要用Pymysql包连接MySQL数据库,并在MySQL数据库中查询相关信息列遍历并写入列表,然后关闭连接。

数据概况的内容是从数据库中查询所有职位信息,遍历数据表信息并存放至列表代码如下:

cursor.execute("select count(*) from demo"); count = cursor.fetchall() cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

#返回字典(dict)表示的记录,就要cursorclass参数设为MySQLdb.cursors.DictCursor类。 cursor.execute("select * from demo limit "+str(page)+","+str(limit)); data_dict = [] result = cursor.fetchall() for field in result: data_dict.append(field)

3.2.3学历情况数据库查询

学历情况的部分分别展示的是招聘企业对学历的要求还有对工作经验的要求的数据。学历的要求是从数据库中查询所有的学历类别并返回所有结果,循环这些学历,每次都查询并返回所有招聘职位需求学历的结果,对工作要求的数据也是这样的方法进行查询。代码如下:

cursor.execute("SELECT DISTINCT(education) from demo"); result = cursor.fetchall() education = [] education_data = []

color_list = ['#459AF0','#38C3B0','#86CA5A','#BFD44F'] for field in result: education.append(field[0])

for i in range(len(education)): cursor.execute("SELECT count(*) from demo where education = '" + education[i] + "'"); count = cursor.fetchall() education_data.append({'value': count[0][0],'itemStyle': {'color': color_list[i]}})

学历类型与每个学历类型的招聘岗位数,以及工作经验类型与招聘岗位数,学历情况数据,如图3-3所示。

图3-3 学历情况

3.2.4企业情况数据库查询

企业情况展示了主要招聘城市和企业规模两种数据。主要招聘城市是在数据库中查询招聘的城市City列,并叠加每个招聘城市所招聘的岗位数,企业所在城市的分布,由于爬取的是全国的招聘数据,所以招聘城市过多全部在饼图中展示的话会看不清内容,所以,将饼状图只显示前7个城市的招聘比例和招聘企业的个数,企业规模的数据是循环公司规模查询数据库中所有公司规模将属于哪种公司规模的公司加入列表。部分代码如下:

for i in city:

#查询各城市招聘人数 cursor.execute("SELECT count(*) from demo where city = '" + i + "'");

count = cursor.fetchall()

#'value':招聘人数, 'name': 城市名 dict = {'value': count[0][0], 'name': i} city_result.append(dict) for i in city[7:]:

#设置七名以后的城市不显示 selected[i] = False

以下是企业各招聘城市,及招聘城市招聘岗位数,各招聘公司规模的公司数,执行数据库结果,企业情况数据,如图3-4所示。

图3-4 薪资情况数据

3.2.5薪资情况数据库查询

薪资情况的部分分别查询数据库的工作薪资Salary是属于10k以下的Java岗位,Python岗位还是Php岗位,并遍历数据库。然后依次分别查询数据库其他薪资范畴10k到20k的、20k到30k的、30k到40k的、40k以上的三种语言相关的岗位信息,主要代码如下:

for i in positionName:

#此处查询的就是20k到30k薪资的分别有关Java、Python、Php的岗位信息 cursor.execute("SELECT COUNT(*) FROM demo WHERE SUBSTR(salary,1,2) BETWEEN 20 AND 30 and positionName like '%"+i+"%';");

#接收全部数据库结果信息 count = cursor.fetchall()

#依次加入列表 temp_list += count[0]

3.3 数据可视化设计

ECharts显示图表柱状图、折线图,将从数据库中提取的数据传输到ECharts框架里,在前端界面展示出来,ECharts是JavaStript语言,可以将后端的数据传输至ECharts框架里,以图表形式展现出来。

3.3.1福利词云设计

福利待遇部分是将查询的数据库的福利内容列所有福利待遇加入列表,使用Jieba分词设置停止词,并提取主题词,返回权重最大的前100个词。然后以词云形式展现在前端可视化界面。代码如下:

positionAdvantage = []

#设置停止词 jieba.analyse.set_stop_words('./stopwords.txt') tags = jieba.analyse.extract_tags(content, topK=100, withWeight=True)

#提取主题词content:要分词的语句

# topk: 返回的是权重最大的前100个词

#withWeight:True返回关键词的权重值 for v, n in tags: mydict = {} mydict["name"] = v mydict["value"] = str(int(n * 10000)) positionAdvantage.append(mydict)

查询的职位福利情况和公司福利情况的数据从数据库得出结果,福利情况数据,如图3-5所示。

图3-5 福利情况数据

公司福利与职位福利可以通过ECharts在前端网页可视化展示出来。公司福利与职位福利的词云图,如图3-6所示。

图3-6 词云图

3.3.2柱状图和折线图

柱状图通过ECharts显示,后端的数据以Json形式传输至ECharts图表里可以动态切换柱状图与折线图,并且鼠标点到相应位置会显示柱状图或者条形图的数据信息。

柱状图或条形图可以切换为数据视图,保存图片,实现柱状图与条形图之间的动态切换,部分代码如下:

dataView: { //数据视图 show: true }, saveAsImage: { //保存图片 show: true

},

//动态类型切换,可切换柱状图与饼图 magicType: { type: ['bar', 'line']

鼠标触碰可以触发显示相关的招聘数据,下面是将Json数据传输至ECharts里的公司规模和公司规模结果的代码,写出数值轴类型和类目轴类型,柱状图或是折线图类型,其他学历情况和薪资待遇的柱状图和折线图的数据展示也是如此。代码如下:

xAxis: {

#类目轴 type: 'category',

#此处放从数据库查询出来的公司规模大小的内容在x轴下方展示 data: res.companySize }, yAxis: {

#数值轴 type: 'value' }, series: [{

#此处是公司规模大小的结果 data: res.companySizeResult, type: 'line' }]

柱状图和折线图之间的相互转换可以动态实现,例如薪资待遇情况和公司规模的柱状图也可以通过用户点击进行动态切换成折线图或者数据,公司规模情况的柱状图,如图3-7所示。

图3-7 柱状图

3.3.3矩形树图

将数据传输至ECharts里后,将数据以树图的形式展示出来,矩形树图的类型为Treemap,设置树图属性,以及设置树图中的文本样式。代码如下:

data = res.workYear_data

for(var n in data) { data[n]['name'] = data[n]['name'] + ' ' + data[n]['value'] }

对工作经验的要求统计分布用ECharts以矩形树图的形式展示在前端界面。关于工作经验的矩形树图,如图3-8所示。

图3-8 矩形树图

3.3.4饼图

企业所在城市的分布,由于爬取的是全国的招聘数据,所以招聘城市过多全部展示不够美观,所以饼状图只显示前7个城市的招聘比例和招聘企业的个数,如果想要其他招聘城市的招聘信息只需要点击城市即可在饼状图中显示,部分代码如下:

legend: {

orient: 'vertical', left: 'left', data: res.city,

#只显示前七个城市 selected: res.selected },

用ECharts可视化显示岗位的主要招聘城市前七个城市及其岗位数的饼状图分布并,点击城市可以在饼图中添加此城市的招聘岗位数及占比。饼状图,如图3-9所示。

图3-9 饼状图

3.4可视化展示

通过对招聘数据的可视化展示,可以让用户直观看到招聘信息的薪资情况,招聘城市,岗位福利等情况信息,从而分析自己想要去的城市和想工作的岗位,以及工作岗位的要求,对自己的职业规划指明方向。

3.4.1数据概况

通过爬取的Java、Python、Php三种相关信息的招聘岗位信息,可以查看数据库里的全部职位列表,也可以输入学历与关键字根据用户需求个性化显示招聘信息,用户也可以选择性查看岗位的部分信息,搜索查询招聘信息,如图3-10所示。

图3-10 搜索查询招聘信息

3.4.2薪资情况

爬取的全国的Java、Python、Php语言的招聘岗位统计后通过使用ECharts图表展示的柱状图和饼状图可以看出这三种类型的薪资主要的分布在10k到20k之间,不同语言的岗位薪资分布差别不大,计算机相关岗位还是有很好的前景的。薪资情况,如图3-11所示。

图3-11 薪资状况

薪资状况的柱状图可以切换为折线图,鼠标触发事件会显示薪资分布统计所招聘的人数,薪资状况的折线图与数据视图,如图3-12所示。

图3-12 薪资状况折线图与数据视图

3.4.3企业情况

根据招聘岗位所在城市信息可以看到北京、上海、深圳、广州这些城市招聘的岗位较多,招聘公司的规模分布也很平均,但50-150人规模的人数占比最多,也可以选择其他城市查看招聘岗位个数,根据自己的意向城市和各城市招聘比例个性化选择岗位,企业分布饼图、公司规模柱状图,如图3-13所示。

图3-13 企业分布饼图、公司规模柱状图

3.4.4福利情况

根据福利的词云分析可以看到各大公司对于职位福利和公司福利方面着重将五险一金、带薪休假、绩效奖金等来吸引人才,福利情况,词云图可以直观看到大部分岗位及公司的待遇。福利情况,如图3-14所示。

图3-14 福利情况

3.4.5学历情况

根据学历情况的分析可以看到招本科及以上学历的岗位最多,远高于其他学历招聘,对于工作经验要求的矩形树图可以看出要求其工作经验一般为3到5年,其次工作经验要求1到3年,但是经验要求一年以下工作经验的人数最少。学历情况及工作经验可视化,如图3-15所示。

图3-15 学历情况及工作经验可视化

3.5 本章小结

本章主要阐述了本招聘网站的爬虫及可视化系统的设计思想与开发的思路。展示了对拉钩网站网页的分析以及模拟浏览器向服务器端的访问来进行对招聘数据的爬取,以及对爬取数据的处理和使用ECharts进行的可视化展示,是对招聘数据可视化系统的一些具体功能的描述。同时对招聘信息的可视化进行展示。

第4章 功能测试及成果展示

任何一个项目完成之后都必须要对该项目的测试,以检查项目是否有缺陷,设计多个测试用例,检查用户在使用阶段是否会有此类问题。也可以在此过程中做出完善,本章主要是对招聘数据可视化的交互功能是否满足要求进行测试。

4.1 测试内容

招聘数据的可视化主要是招聘信息的展示和交互,所以我们主要测试用户的操作与系统的交互是否正常。所以选择开发人员手工执行测试用例的方式进行。以下是对招聘数据可视化进行的详细说明。招聘数据可视化测试用例,如表4-1所示。

表4-1 招聘数据可视化测试用例

测试名称:招聘数据可视化测试测试目的:看用户点击相应操作是否正确显示可视化数据,柱状图与折线图是否能正常切换,数据概览输入相关信息是否能显示相关数据。前置测试:成功连接数据库,并可视化展示招聘信息。主要参与者:用户

功能模块

测试目的

测试步骤

预期结果

数据概览

输入学历和相关职位关键词能否显示正确信息

输入学历与关键词查询

出现了相关信息,没有其他信息

薪资情况

柱状图与折线图是否能动态切换

点击切换折线图

折线图出现

企业情况

点击其他未显示的城市是否能出现城市招聘岗位数信息

点击其中某一城市

饼图中添加了该城市信息

福利情况

鼠标触碰到某一高频词是否能显示该词出现的次数

鼠标触碰该词

出现该词的出现次数

学历情况

鼠标触碰某一学历的柱状图,是否能出现招聘人数

鼠标触碰该柱状图

显示招聘人数

4.2 测试结果

本项目的所有功能经过测试后已经完全满足要求。本项目满足了招聘数据列表的展示,薪资待遇的分布展示,公司分布情况的饼状图展示,公司规模大小的柱状图和折线图的展示分布,公司福利情况和职位福利的词云展示,对学历和工作经验要求的条状图和矩形树图的展示。

4.3本章小结

本章通过使用测试案例数据对招聘数据的可视化分析进行测试,测试过程中发现了一些问题,比如饼状图没有设计只显示七个城市导致饼状图不好看。本次完善了功能,最后完成测试,但我们还需要加深学习,让项目变得更加实用。

结 论

本次论文完成了对于基于Python的招聘网站的爬虫及可视化,系统基本上达到了任务要求,需要参考Java、Python、Php语言的相关岗位招聘信息的计算机应聘人员可以根据自身需求,查看薪资待遇的水平分布、企业的主要招聘城市和企业规模、企业主要吸引人才发放的福利、企业对应聘人员的学历及工作经验的要求,应聘者可以根据这些信息来选择自己发展空间更大的城市,看薪资是否满足自身需求,根据公司招聘要求提升自己的水平,为以后的学习找到更好的工作指明方向。临近毕业对于急于找工作步入社会的计算机专业的我们来说,去哪个城市工作,工作待遇一般怎样,工作的薪资一般为多少,公司对应聘者的经验学历要求一般都是什么,这一切我们都是迷茫的,因此,我设计的招聘信息的爬虫及可视化,也可以为我们这样的应聘者分析方向。

虽然在这次毕业设计已经完成。但系统也存在着一些局限,例如,本系统无法满足各个行业的人才来使用本数据可视化系统。需要不断的提升软件设计技术和方法,满足用户需求,所以在接下来的开发中丰富和完善系统都是很有必要的。

参考文献

  1. 王芳.基于Python的招聘网站信息爬取与数据分析[J].信息技术与网络安全,2019.08

  2. 贾柠瑜.基于python爬虫的岗位数据分析--以拉勾网为例[J].信息技术与信息化,2019

  3. 杨众.基于Python语言的招聘信息可视化分析[J].计算机与网络,2019

  4. 王慧玲.招聘网站数据可视化分析平台的设计与实现.曲阜师范大学,2020.06

  5. (美)Miguel Grinberg. Flask Web开发:基于Python的Web应用开发实战[M].人民邮电出版社,2015.01

  6. (美)Wes McKinney. 利用Python进行数据分析[M].机械工业出版社,2014.01

  7. 郭丽蓉.大数据环境下的网络爬虫设计[J].山西电子技术,2018(2)

  8. 王涛.基于Python的软件技术人才招聘信息分析与实现——以前程无忧为例[J].福建电 脑,2018

  9. 崔蓬.ECharts在数据可视化中的应用[J].软件工程,2019

  10. 裴丹丹.基于ECharts的数据可视化实现[D].北京邮电大学,2018

  11. 项博良,唐淳淳,钱前,曹健东.基于网络爬虫和数据分析[J].智能计算机与应用,2020.01

  12. 余本国.Python数据分析基础[M].清华大学出版社,2018

  13. 董付国.Python数据分析、挖掘与可视化[M].南京邮电大学,2018.05

  14. 孙波翔/李斌译.Python核心编程(第3版)[M].人民邮电出版社,2016

  15. 袁国忠.Python编程从入门到实践[M].人民邮电出版社,2016

  16. 关鑫洁, 黄思奇, 位磊. 基于Python的求职信息采集分析系统设计与实现[J].计算机时代, 2020.

  17. 边倩, 王振铎, 库赵云. 基于Python的招聘岗位数据分析系统的设计与实现[J].微型电脑应用, 2020.

  18. 常逢佳, 李宗花, 文静,等. 基于Python的招聘数据爬虫设计与实现[J].软件导刊, 2019.

  19. 王瑞梅. 网络招聘数据可视化分析系统的设计与实现[D].河北师范大学.

  20. 刘娟, 管希东. 基于Python爬虫的职位信息数据分析和可视化系统实现[J].软件工程与应用, 2020.

  21. 谭云鹤. 基于招聘网站数据处理类岗位的人才需求分析.天津财经大学.

  22. 欧阳元东. 基于Python的网站数据爬取与分析的技术实现策略[J].电脑知识与技术, 2020.

  23. 刘晓知. 基于Python的招聘网站信息爬取与数据分析[J].电子测试, 2020.

  24. 于韬, 李伟, 代丽伟. 基于Python的新浪新闻爬虫系统的设计与实现[J].电子技术与软件工程, 2018.

  25. 谭昕章,杜晖. 电商运营岗位的社会需求及岗位素质分析——基于智联招聘网站数据[J]. 现代商贸工业, 2021.

  26. 杨国军. 基于Python的数据爬虫的设计与实现[J].数字技术与应用, 2020.

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python算法题集_旋转图像

Python算法题集_旋转图像 题目48:旋转图像1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【矩阵复本】2) 改进版一【矩阵转置矩阵反转】3) 改进版二【四值旋转】 4. 最优算法 题目48:旋转图像 本文为Python算法题集之一…

Windows Server安装部署FTP服务

文章目录 建立FTP目录通过IIS在Server上安装FTP服务配置FTP站点配置身份验证和授权测试FTP服务FTP软件推荐FTP客户端软件FTP服务器软件适合Ubuntu的FTP软件 推荐阅读 在Windows操作系统中安装和配置FTP服务,主要是基于Internet Information Services (IIS)的FTP服务…

SQL sever2008中创建用户并赋权

一、创建数据库dream CREATE DATABASE dream; 二、创建登录用户XZS 法一:使用SSMS创建 通过查询 sys.syslogins 系统视图来确定当前登录是否具有系统管理员权限。执行以下查询语句: SELECT name, isntname FROM sys.syslogins WHERE sysadmin 1;选…

一款轻量级、高性能、功能强大的内网穿透代理服务器

简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网htt…

如何保证MySQL和Redis中的数据一致性?

文章目录 前言一、缓存案例1.1 缓存常见用法1.2 缓存不一致产生的原因 二、解决方案2.1 先删除缓存,再更新数据库2.2 先更新数据库,删除缓存2.3 只更新缓存,由缓存自己同步更新数据库2.4 只更新缓存,由缓存自己异步更新数据库2.5 …

Fink CDC数据同步(一)环境部署

1 背景介绍 Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 Flink CDC 是 Apache Flink 的一组源连接器,基于数据库日志的…

K8S部署Harbor(三部曲之三:使用)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

Cmake编译Opencv3.3.1遇到有些文件无法下载的错误解决:

前言: 对于,opencv有些配置文件错误并未致命,所以,有错误也不影响后续的编译:但是,后引用如果要用,在回过头来还是要解决的。 问题表述: 比如,有些文件下载的错误&am…

[官方精简母盘WIM]_Windows10_22H2_19045.3930

[官方精简母盘WIM]_Windows10_22H2_19045.3930 【原汁原味】不过多阐述了哈,谁用谁知道😉 zh-cn_windows_10_business_editions_version_22h2_updated_jan_2024_x64_dvd_fef73a09 链接:https://pan.baidu.com/s/19Qj6cBHzaU8Rkn8WZ7-o2w?pw…

three.js 精灵模型Sprite作为标签

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><divid"threejs"style"border: 1px solid red; position: relative"></div></div></el-main></…

C++ 动态规划 线性DP 最长共同子序列

给定两个长度分别为 N 和 M 的字符串 A 和 B &#xff0c;求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M 。 第二行包含一个长度为 N 的字符串&#xff0c;表示字符串 A 。 第三行包含一个长度为 M 的字符串&#xff0c;表…

excel给数据库初始化/旧数据处理(自动sql拼装)

思路&#xff1a; 首先导出数据到excel编写单条数据操作的sql利用excel CONCATENATE 函数自动生成&#xff0c;每一行数据的操作sql 小技巧:对于需要套娃的字段值&#xff0c;可以加一个临时列同样使用CONCATENATE函数进行sql拼装 案例&#xff1a; 1.临时列:CONCATENATE(C2, …