今日焦点:

当前所在的位置:首页>>调查分析>>分析
基于Python爬虫技术下网络招聘大数据的应用探索与实现
日期:2022-11-09作者:

内容摘要:

为了解决获取就业信息滞后、时间成本高等问题,运用网络爬虫信息技术设计思想,开发和研究招聘网站就业信息挖掘与分析系统。本文以Python计算机设计语言为基础,实现以台州本地政府招聘网站为爬取对象,对网站招聘信息JSON数据源进行抓取,清洗存储,运用xlwings、pandas、matplotlib和pyecharts等模块进行数据挖掘及展示。 

 

引言

劳动力调查主要调查当月调查周内的抽中样本户的就业情况,虽为月度抽样调查项目,其时效性无法覆盖当月其他日期的就业情况;同时,劳动力调查数据只来源于就业的需方,需要有新的补充途径及时了解就业的供方的信息。在数据量快速增长的时代,大数据正迅速成为许多组织的社会需求和标准结构。通过整理、分析、提取和集成大量数据,能够发现新的数据,并可以创造出新的价值,本文的主旨也是希冀通过大数据手段破解当前月度调查所存在的不足。

疫情封控,现场招聘举办的难度大增,一定程度上增加了招聘网站的流量,网络招聘越来越成为各公司的招聘首选手段,网络招聘还具有岗位齐全、信息综合,样本数量大、反映企业真实需求、时效性高等特点,可以预见,通过分析研究招聘网站信息来研究就业市场必将越来越流行。

一、数据来源与研究方法

(一)数据来源。

为避免选取的数据过于杂乱,并更针对台州市的就业情况,因此本文选取台州市人力资源和社会保障局下属的《台州人才网》作为数据来源。

(二)技术方法。

1.Python。

Python是一种简单易学、功能强大的计算机程序设计语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,让人更加容易阅读、调试和扩展,再加上其高度集成了解释性、交互性、面向对象性和丰富的可扩展性等特点,特别是可导入多种模块,大量的第三方科学计算函数库都有对应版本对其支持,使得Python语言在爬虫和大数据处理分析方面优点明显。

本项目,运用python中的requests模块编写抓取软件,实现台州人才网职位JSON 源文件的下载;结合json模块实现JSON 数据源的解析,再结合xlwings模块进行数据存取。最后,结合pandas、matplotlib和pyecharts等模块进行数据挖掘及展示。

2.网络爬虫。

网络爬虫(Web Crawler),又称网页蜘蛛、网络机器人,是一种按照一定规则,自动抓取万维网数据信息的程序。网络爬虫的基本实现原理及过程:通过互联网获取网页初始URL链接,将初始网页存储至本机,并对初始网页中出现的新URL链接进行爬取,始终重复上述过程,直至满足设定的停止条件。若无停止条件,则直到无法获取新的URL链接为止,以此实现对网页数据的遍历,供后期数据分析使用。

二、爬虫软件设计流程

(一)网站分析。

首先利用Chrome浏览器(因为通过Chrome浏览器的开发人员工具选项,可以得到网页数据来源。)打开台州人才网主页(https://www.tzrc.cn/),点击网络搜索,可以看到与职位相关的信息即被列出,再用空白关键字点击搜索,就可以看到网站上的所有不同的职位信息,这些信息就是待爬取的招聘岗位数据。

点击浏览器工具里的开发人员工具,选择network 选项卡中XHR标签,再点再F5来刷新网页,可以通过返回信息里的getjobs返回页面的预览为标准的json数据,主要内容如下:

{msg: "success", listcount: 1179, pagecount: 66, pagesize: 18, pageindex: 1,…}

可以了解到,网站的职位信息通过AJAX异步请求来组织数据传输。

分析getjobs返回页面的jobs标签,可以看到:

jobs: [{

jobs: [{id: 475081, userid: 2872929, compid: 2872929, workface: "社会人士,",

area: "温岭市"

bdmap: ""

company: "温岭市七星电机有限公司"

companyhead: ""

,…]

可以得出,该处的键值名分别有workface、company、area、job、edu、salary和language,分别对应职位的职业要求、公司名、工作区域、职位名称、教育要求、工资和外语要求等含义。可见,其数据结构与结构化数据库方式相同,也与excel的行与列的结构形式相似,数据保存方式可以用结构化数据库和excel进行保存,考虑统计分析的使用习惯,本文选用excel来保存数据,因此本文使用xlwings模块进行excel数据存取。

(二)程序设计。

因爬取的数据是以JSON格式组织的,因此程序流程主要分为如下步骤完成

1.利用request获得response对象。

如果网站的请求不是从浏览器发出,则无法获得服务器相应内容,所以爬虫程序需要伪装成一个从浏览器发出的请求,就要求程序在发送 Request 请求时,需要加入特定的 headers。分析在台州人才网的xhr标签的标头,其表单数据部分为:

apiurl: /Open/Api/

comefrom: 电脑端

label: website

secret: 374472D1C57F388C7171A347459EA738

可以看出apiurl字段为getjobs网页在服务器上的相对路径,一般网站为了防止因为搜索引擎和网络爬虫的爬取,常使用一定的防盗链签名,secret字段就是这种防盗链签名。

根据以上分析,params、headers和response分别如下:

params = {

    

    'apiurl': '/Open/Api/',

    'comefrom': '电脑端',

    'label': 'website',

    'secret': 374472D1C57F388C7171A347459EA738,

    'showurl': 'https://www.tzrc.cn/Job/Search'

    

}

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '

'Chrome/86.0.4240.198 Safari/537.36 '

}

response = requests.get(url=url, params=params, headers=headers)

2.将 response 对象返回的数据进行分页爬取。

根据代码段:

result = json.loads(response.text)

得到的就是json数据,分析json数据得到pagecount键值为总页面数。

通过代码段:

for p in range(result['pagecount']):

这样的for循环,可以组织每个不同的页面的爬取路径。

再通过得到的页面json数据,通过代码段:

for i in result['jobs']:

可得到完整结构的jobs职位信息。

3.将爬取的数据保存在Excel中。

通过list列表作为单行的jobs数据进行临时保存,代码段:

info_list.append(

    …,

i['workface'],i['companyhead'],i['company'],

)

再通过sheet进行填充,因为数据的第一行是标题,填充要从第二行的第一列开始(也就是a2), 代码段:               

sheet.range('a2').value = info_list

保存为“ test.xlsx” Excel 工作簿的代码段:

workbook.save('test.xlsx')

三、数据分析

(一)数据处理分析。

现从《台州人才网》上爬取的招聘岗位信息共有1187条,发布时间最早为2015年,分析发布时间可以发现发布时间较远年份的职位信息非常少,可见网络对招聘岗位可能采取逐步覆盖或删除等处理方式。为此,为保证最前的数据能及时被爬取及更新,需要了解网站数据的更新频率,经联系《台州人才网》了解到,网站一般收取的发布费用以周收取,因此,数据爬取及分析当以一周为时间单位来进行。

通过数据结构了解,有:id、userid、compid、workface、companyhead、companyicon、bdmap、industry、companytype、companysize、companymoney、job、num、welfare、area、edu、salary、worktype、worktime、language、minage、maxage、minsalary、maxsalary、time、refreshtime、hits、status和sort字段,一般公司名称、岗位数量、岗位名称、职位要求和工资水平一般比较重要。

根据job列的岗位名称分析,一周内共有311个岗位,根据岗位名称去重后得到共计273个不同岗位名,比如:研发工程师(产品经理助理)和研发工程师(JAVA开发),同为研发工程师就有针对产品经理助理和JAVA开发的,因此很难根据岗位名称进行分析。薪酬水平也是重要的信息,但《台州人才网》的薪酬数据是10000及以上、8000到9999和7000到7999等范围字段来安排,因此没有办法明确了解更精确的工资数据,尚无法分析平均工资等数据。依据现有数据分析能力,明确分析的重点有:学历要求、工作经验要求、薪酬范围情况、相同岗位名称出现多少和提供岗位数前十的单位等五项。

(二)数据处理设计。

1.学历要求。

学历要求占比可以用环形图来展示,因此可以使用matplotlib.pyplot模块,该模块需要pandas模块支持,也需要一起导入,并导入xlwings模块对excel表格进行支持。

程序代码段:

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus'] = False

x = df['学历']

y = df['岗位数']

plt.pie(y, labels = x, autopct = '%.2f%%', pctdistance = 0.85, radius = 1.0, labeldistance = 1.1, wedgeprops = {'width' : 0.3, 'linewidth' : 2, 'edgecolor' : 'white'})

plt.title(label = ' ', fontdict = {'color' : 'black', 'size' : 30}, loc = 'center')

根据环形图可知,当前台州市对大专学历的就业者需求最大,台州市以制造业发达见长,大量的工业企业也正在改进技术,智能制造越来越成为企业的行进方向,工业企业对员工的学历要求也越来越高。

2.工作经验要求。

工作经验要求展示的程序设计几乎同于学历要求。

根据环形图可知,58.7%的岗位要求是有工作经验的社会人士,25.4%的岗位对毕业生开放,毕业生群体的就业难度明显低于社会人士,当前毕业生就业难度比较低。

3.薪酬范围情况。

在对数据的掌握及分析变得愈加重要的当今时代,数据可视化作为提高用户对数据的理解程度、创新架构和增进体验的重要一环,一向富有表现力的Python语言应当可以发挥更大作用,优秀的pyechart第三方库即在这样的背景下诞生。pyecharts库是一个用于生成Echarts图表的类库,Echarts是一个由百度开源的商业级数据图表,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。2021年1月Apache基金会官方宣布ECharts项目正式毕业,成为Apache顶级项目。。

ECharts 可提供了常规的折线图、柱状图、散点图、饼图、K线图外,还可用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。它是一个纯JavaScript的图表库,可以为用户提供直观生动,可交互,可高度个性化定制的数据可视化图表,赋予了用户对数据进行挖掘整合的能力,同时,可以被网站直接使用,更增加了数据显示的途径。本文对薪酬显示部分,引入pyecharts模板进行显示。

程序代码段:

salarys = data["salarys"]

sums = data["sums"]

pie = Pie("", title_pos='center', width=800)

pie.add(" ", salarys, sums, is_label_show=True, is_toolbox_show=False)

pie.render('rose.html') 

根据Echarts饼图绘制生成原理,可见6000到6999元薪酬的岗位提供量占比最大,根据企业相关调研信息了解,大部分企业当前薪酬主要也是集中在6000多元每月,同时10000及以上薪酬岗位也达到了11.27%,台州当前高技能人才需要明显比较大。

4.岗位名称关键词情况。

比如:研发工程师(产品经理助理)和研发工程师(JAVA开发),同为研发工程师就有针对产品经理助理和JAVA开发的,很难根据岗位名称进行分析。本文利用Python的jieba模块进行分词,再通过WordCloud模块将岗位高频关键词进行词云化。

程序代码段:

ls = jieba.lcut(s)  # 生成分词列表

ls = s

text = ' '.join(ls)  # 连接成字符串

word = WordCloud(

    font_path='fz.ttf',  # 设置字体,本机的字体

    background_color='white',  # 设置背景颜色

    max_font_size=150,  # 设置字体最大值

    max_words=2000,  # 设置最大显示字数

    ).generate(ls)

image = word.to_image()

word.to_file('2.png')

根据词云图生成原理,词语显示规格越突出、距离中心位置越近词语出现频率越高。从词云图可以看出工程师、专员和助理这三个工种招聘关键词出现次数最多。台州市作为制造业发展较好的城市,对高技能工种需求比较高,高技能人才也更易在台州找到工作。

5.提供岗位数前十的单位。

根据每个企业提供的招聘职位数据,进行合计汇总,并进行排序,可通过xlwings模块绘制柱形图。

程序代码段:

chart = i.charts.add(left = 200, top = 0, width = 355, height = 211)

chart.set_source_data(i['A1'].expand('table'))

chart.chart_type = 'bar_clustered'

代码中bar_clustered就是指定了样式为柱形图。 

可以看出,台州众凯企业管理咨询有限公司和浙江华诚会计师事务所有限公司招聘的人数最多,分析这两家公司的招聘内容,可以得知其主要负责代招,因为有较多的公司没有专业的人力资源人员,需代招中介公司组织代为初招。

四、结语

本文通过分析招聘网站网页结构,利用 Python 语言及其强大的第三方库编写爬虫代码,获取相应的职位信息,并对收集到的数据进行清洗整理及分析,结合可视化图表及词云图了解招聘需求等。

本文的不足之处主要有三个方向:一是本文只获取了单个网站的就业信息,无法代表全市及各县(市、区)的全部网络招聘情况,下一步的重点将放在如何进行多数据源的就业信息获取及合并,以获得更加全面的就业信息;二是本文在分析岗位名时也提到,同为研发工程师就有分别针对产品经理助理和JAVA开发的,很难根据岗位名称进行分析,需要借助人工智能进行分析,需要用Python写神经网络进行训练等;三是本文虽获取了就业单位的信息,但没有做好产业及行业的相对应匹配,无法进行产业及行业需求的深层级统计分析,进一步的分析则需要借助一些大数据技术实施。

 

 

  国家统计局台州调查队 地址:台州市行政中心2号楼5楼
网站标识码:bm36000046 浙公网安备 33010602000687号
浙ICP备17023767号-6 网站主办单位: 国家统计局浙江调查总队
邮编:318000 联系电话:0576-88512218