基于Python的求职信息采集分析系统设计与实现
时间:2020-10-30 15:01:11 来源:达达文档网 本文已影响 人
关鑫洁 黄思奇 位磊
摘 要:
为了便于求职者和招聘单位更精准地把握当前就业市场的变化与需求,提出了基于Python语言的求职信息采集分析系统,利用Scrapy分布式爬虫获取招聘信息,利用数据挖掘技术分析求职者意向,最后将数据清理并格式化后进行可视化展示。所得出的数据模型可以帮助求职者有效的评估出合适岗位和薪资,从而提高求职者的求职效率,同时招聘单位也可以通过此模型对招聘市场的趋势进行总体把握,提高企业的竞争力。
关键词:
Python; Scrapy分布式爬虫; 数据挖掘; 数据可视化
中图分类号:TP391 文献标识码:A 文章编号:1006-8228(2020)03-32-04
Design and implementation of job search information collection
and analysis system using Python
Guan Xinjie, Huang Siqi, Wei Lei
(Huazhong University of Science and Technology, Wenhua College, Wuhan, Hubei 430074, China)
Abstract:
In order to facilitate the job seekers and the employers to grasp the changes and demands of the current employment market more accurately, this paper proposes a job information collection and analysis system based on Python language, which uses the Scrapy distributed crawler to obtain the recruitment information, uses the data mining technology to analyze the intention of the job seekers, and finally clears and formats the data for visualized display. The data model obtained in this paper can help job seekers effectively assess the right jobs and salaries, thereby improving the efficiency of job seekers, and the employers can also use this model to grasp the overall trend of the recruitment market, improve the competitiveness of enterprises.
Key words:
Python; Scrapy distributed crawler; data mining; data visualization
0 引言
互联网技术广泛应用于各行各业,网上求职日渐成为时尚,越来越多的求职者和供职单位利用网络发布信息。有的求职网站已经对各种职业做出了分类归纳,然而大量的信息涌入使得求职者还是很难把握当前就业市场的变化,想要寻求符合自身需求的岗位很难。同时,大量的信息对于企业的人力资源部门来说也是一种负担,需要做大量的简历筛选工作,并且难以实现对求职者的有效回馈。本文提出基于Python語言[1]的求职信息采集分析系统,以帮助求职者进行岗位和薪资的评估,同时帮助求职单位把握市场趋势,提高企业的竞争力。
1 系统架构
基于Python语言的求职信息采集分析系统,利用Scrapy分布式爬虫获取招聘信息,利用数据挖掘技术分析求职者意向,将数据清理并格式化之后进行可视化展示。该系统主要分为三个模块[2],第一个模块是数据爬取,从招聘网站选择互联网各职位招聘信息,其中招聘信息属性包括公司名称,招聘职位和薪资地理位置等信息。第二个模块是数据清理与格式化,利用pandas库对垃圾数据进行去重,然后对薪资统一格式化为千元/月,且把地理位置统一定位到城市。第三个模块是数据可视化把清理后的数据以图的形式展现给求职者。系统基本架构如图1所示。
2 系统设计与实现
2.1 数据爬取模块
本系统对当下最热门的几个招聘网站,如拉勾网、boss直聘、前程无忧等进行数据爬取,由于数据量过于庞大,如果运用pyspider等框架不仅爬取效率低下而且还有可能会被反爬虫较强的网站封掉IP地址从而导致数据不完整。而Scrapy框架不仅爬取效率高,可配置和可扩展程度也非常高,它几乎可以应对所有反爬虫网站[3]。
首先生成用于抓取第一个URL的初始请求,然后指定从这些请求下载响应调用的回调函数。通过调用start requests()方法为start_urls中制定的URL生成请求以及将parse方法作为请求的回调函数来调用start执行的第一个请求。在回调函数中,将返回带有提取的数据的对象[4]。然后由指定的回调处理它们的响应,使用选择器解析页面内容,将生成的数据项目存储到数据库并用feed导出,得到粗糙的数据源,如表1所示。
2.2 数据挖掘模块
2.2.1 路径分析技术
为了更加准确的分析求职者的意向,所以本项目基于行为日志统计求职者行为路径。用户行为路径的数据巨大,uv指标又不能提前计算好,如果展示5级一个页面的数据量就是10的5次方,然而爬取到的有关数据大概有几千个页面,数据量是无法估量的,所以只能进行实时计算,而Spark非常适合迭代计算[5]。所以此次运用Spark来进行分析计算。
当获取求职者搜索某一页面的行为路径明细数据时,RPC请求到后台,调用spark-submit脚本启动Spark程序,Spark程序进行实时计算并返回数据,前端java解析数据并进行展示。
构建一个多叉树的类,对类的主要属性描述,name全路径,sonlist儿子链表,按时间范围读取上一步预处理的数据,递归计算每一级页面的属性指标,并根据页面路径插入到初始化的Node类根节点中。递归遍历上一步初始化的根节点对象,替换其中的name的id为名称,其中借助Spark DataFrame查询数据。最后将root对象转化成json格式返回前端[6]。这样得到的数据就能清晰的看出求职者们的求职意向流动,如图2所示。
2.2.2 分类分析技术
用贝叶斯分类算法将爬取到的各个职业的有关数据进行分类,其每一条数据样本用一个4维特征向量X={xi}(i=1,2,3,4)表示,其中xi(i=1,2,3,4)分别是属性(公司名称,职位名称,薪资,工作地址)的值,所有样本分为7类:c1,c2,c3,...,c7.对于一个类标记未知的数据记录,根据求职者所查询的信息系统将会与已经分类好的数据进行数据建模为其推荐相关的求职信息。
采取贝叶斯分类算法主要是因为此次爬取的数据很庞大,若用决策树分类算法,神经网络分类算法或其他算法不仅速度会非常慢,而且分类的准确率还不是很高。
2.3 数据清理与格式化
本系统使用Python中的pandas包对数据进行清理和格式化。Pandas提供了快速、灵活和丰富的数据结构,可以简单又直观地处理“关系”和“标签”数据,是 Python中做数据分析的重要模块。
2.3.1 读取数据
通过对网站中职业相关数据爬,取得到的数据大概有几十万条,虽然Pandas模块中有专门针对xlsx和xls这类excel文件的读取方法read_excel。但excel文件最多只能存储100多万行,而csv文件可以存储上亿行数据,所以用read_csv文件[7]。读取代码为:tt=pd.read_excel(r"d:\\***.xlsx",sheet_name="Sheet1")
2.3.2 处理空值
从网页上得到的粗糙数据大多都存在空值,如果不进行空值的处理得到的数据会有很大的偏差,因此对空值的处理进行如下操作:若为1删除,为2替换,3填充。删除又分为是每行有一个空格就删除该行,还是有三个空值就删除该行;替换可以用上下行的值替换或者是用平均值替换。处理空值的关键代码如下:
2.3.3 对薪资,地区格式化
由于不同网站中薪资待遇、地区等信息格式不一,有的薪資单位是千/月,有的是万每年,有的是元/天,有的是K每月,有的有地区,有的没地区,并且有些工作地址定位到市,县,这里对所有工作地点定位到城市。如果不进行上述格式化将无法分析,因此需要将数据进行规范化处理,统一置换成千/月。这里利用xlrd模块读Excel表格,代码如下:
2.3.4 清理数据得到结果
对表格的数据进行重复值校验,对字符串类别的列进行除空格操作,最终得到清理完毕后的数据,如表2所示。实现代码如下:
2.4 数据可视化模块
为了让数据以一种更加直观,清楚的形式展现出来,这里运用python自带的绘图库Pyecharts对每个网站的每个职业绘图。Pyecharts是一个用于生成Echarts图表的类库。系统中主要调用了pyecharts库中的Map,Geo模块来绘出职业对应工作地点的全球散点/热力分布图,可以直观地看出那个城市/区域的职位更多,就业机会更大。用Bar模块来绘出各个职业在每个城市的薪资情况的条形图,x轴是全国主要的32个城市,y轴叠加着职业最高工资与职业最低工资。可以方便求职者在选择工作地点的同时了解地区的平均薪资情况。用Radar模块绘出各个职业所需要掌握的技能比重的雷达图,此雷达图将Radar绘出的雷达图进行了x轴变形。将原先x轴上的点离原点的距离r相应地换算为弧长L,每一个维度所间隔的角度θ由维度N决定,将圆周长切分成等份的弧度。所用到的弧长计算公式为:L=2r×п×θ/360。如将Java相关岗位在各个城市的薪资(千/月)情况进行展示,如图3所示。
3 结束语
基于Python的求职信息采集分析系统是大数据在互联网领域的典型应用。本系统通过Scrapy分布式爬虫技术从各大招聘网站获取海量信息,利用数据挖掘技术分析求职者意向,最后数据清理并格式化后进行可视化展示。该系统可以有效的展示各地区热门岗位统计情况,各求职岗位的工作地点分布情况,各地区岗位薪资数据对比情况,不同岗位所需技能分析等等,根据各数据模型求职者和求职单位可以根据自己不同的需求获取相应信息并对求职市场进行总体把握,从而做出正确决策。
参考文献(References):
[1] Jake VanderPlas.Python数据科学手册[M].人民邮电出版社,2018.
[2] 赵刚.大数据:技术与应用实践指南(第2版)[M].电子工业出版社,2016.
[3] 崔庆才.Python3网络爬虫开发实战[M].人民邮电出版社,2017.
[4] 张誉曜,陈媛媛.基于Python下的爬虫综述及应用[J].中国新通信,2019.21(6):98
[5] Jiawei Han.数据挖掘:概念与技术(第3版)[M].机械工业出版社,2012.
[6] 韦建国,王建勇.基于Python的Web数据挖掘应用[J].浙江水利水电学院学报,2019.31(4):79-82
[7] 董付国.Python程序设计开发宝典[M].清华大学出版社,2017.