招聘好帮手:用“蜂巢数据”筛选简历

2016-03-21 03:51
办公自动化 2016年3期
关键词:脚本蜂巢网页

非 猫



招聘好帮手:用“蜂巢数据”筛选简历

非猫

Recruitment a Good Assistant: Use "Honeycomb Data" to Screen Resumes

Fei Mao

想要招到好员工,筛选简历是第一关,而且是一件枯燥的任务。本文教大家用蜂巢数据这款软件来自动化筛选简历。

一、前言

我是一家IT公司的项目经理,最近公司准备启动一个新项目,我负责技术团队的搭建。

招聘绝对是一件很耗体力的事,我这里主要指通过网上招聘渠道招人。每天要在茫茫的简历堆里挑选出符合公司用人要求的简历,有时候看了数十个也没一个合适的,有时候前两天刚看过的简历今天又看了一遍,相当考验人的耐心。

这是一种机械又枯燥的劳动,应该交给机器来做,至少应该让机器把大部分无用的数据先过滤掉才对。

前段时间听朋友介绍过”蜂巢数据”这款软件,它能对网页数据进行自动化采集,处理,保存。我就用它来筛选网络上的简历。

二、正文

“蜂巢数据”可以从官方网站上下载:http://cn.hdata.me/

也可以通过其它软件下载站下载,请注意要下载1.3以后的版本,1.3以前的版本复制XPath有BUG。

下载安装后,运行“蜂巢数据”,将看到如图1所示的界面:

从左到右,依次是导航面板,任务面板和工作区。导航面板里可以看到各个任务组,点击任务组后会打开任务面板,任务面板里面列出的是当前选中的任务组里的任务。

“蜂巢数据”以任务为工作单元,每个任务拥有自己的采集脚本和数据库。各任务之间相互独立,互不影响。

因为我负责的项目需要Android程序员,这里我就以Android程序员简历采集为例,给大家示范如何用“蜂巢数据”采集和过滤简历。

点击工具栏上的“新建任务”按钮,在弹出的新建任务对话框中输入任务名“Android程序员”,然后点保存,如图2所示:

任务创建完成后,“蜂巢数据”会在工作区自动打开任务编辑窗口。我们将在任务编辑窗口里完成编写采集脚本,定义数据字段等工作。

任务编辑窗口的布局如图3所示(为了扩大视图,我关闭了导航面板和任务面板,只留下工作区):

上面是脚本编辑区和浏览器,脚本编辑区用于编写采集脚本,浏览器用于辅助脚本调试,当脚本运行时,浏览器会根据脚本的指令打开网页。

下面是各种辅助脚本编写的工具面板和数据字段编辑区:

1、输出面板会显示脚本运行过程中打印的内容。

2、网页审查面板可以查看浏览器中打开的网页DOM结构。

3、源文件面板可以查看浏览器中打开的网页的源码。

4、数据字段面板用于对当前任务数据库字段的编辑。

介绍完任务编辑界面,接下来我们开始动工。

首先我们来定义数据字段,“蜂巢数据”会根据采集脚本,把网页上的数据保存到本地数据库供我们查看。我们要在脚本运行之前设计好数据库,有哪些内容需要保存。

这里要采集的是简历,一般个人简历包括这几个部分:姓名,性别,年龄,工作经验,学历,个人简介,简历链接等数据。

我们在数据字段面板中,点击添加字段,在弹出的添加字段对话框里填写字段名,然后点击保存。添加字段对话框里有一个“过滤重复数据”选项,钩上后,如果数据库里该字段下已存在相同的数据,数据将会被丢弃。我肯定不想看到重复的简历,所以这里对简历链接进行过滤。如图4所示:

设计完数据库字段后,我们可以开始编写采集脚本了。采集脚本需要用JavaScript语言编写(一种非常简单的脚本语言,有网页制作经验的朋友应该很熟悉,百度上可以搜索到很多教程,这里就不多介绍了)。

第一步我们要打开待采集的网页,我要从58同城上采集Android程序员简历,58同城里搜索简历的网页地址是:http://hz.58.com/searchjob/?key=android

在“蜂巢数据”里通过脚本打开该页面,语句是:

load("http://hz.58.com/searchjob/?key=android");

如果你不懂JavaScript,可以直接复制上面的代码到编辑区,把网页地址替换成任何你想打开的页面即可。需要注意的是,括号和双引号不能漏写也不能多写,且必须是英文字符。

在脚本编辑区输入以上代码后,点击编辑区左边的运行按钮,可以看到脚本运行的效果。目前我们只是打开了简历搜索页面,还没开始采集数据。如图5所示:

第二步我们要分析网页内容,看看哪些数据是我们需要的。我们在浏览器里看下58同城的简历搜索结果,是一个列表,每一行是一条简历信息,分别有姓名,性别,年龄,工作经验,学历等我们所需要的数据。

“蜂巢数据”可以根据XPath来提取网页里的数据(XPath用于标识网页中元素的地址,有兴趣的朋友可以百度下)。我们在第一条简历的姓名上点击鼠标右键,在弹出菜单里选择复制XPath,如图6所示:

然后在脚本编辑框内,我们通过刚才复制的XPath提取姓名:name = inner_text("//*[@id='infolist']/dl/dd[2]");

(注意:刚才复制过来的XPath,infolist是被双引号包起来的,脚本里我们替换成单引号,这是JavaScript语法需要,有兴趣的朋友可以学习下JavaScript语法)

用同样的办法,我们再提取性别,年龄,工作经验,学历等数据,然后我们通过“蜂巢数据”提供的print方法,把提取到的数据打印到输出面板,如图7所示:

完整的代码如下:

load("http://hz.58.com/searchjob/?key=android");

name = inner_text("//*[@id='infolist']/dl/dd[2]");

gender = inner_text("//*[@id='infolist']/dl/dd[3]");

age = inner_text("//*[@id='infolist']/dl/dd[4]");

exp = inner_text("//*[@id='infolist']/dl/dd[5]");

brief = inner_text("//*[@id='infolist']/dl/dt/span[2]");

link = attribute("//*[@id='infolist']/dl/dt/a","href");

print("姓名:" + name.trim());

print("性别:" + gender.trim());

print("年龄:" + age.trim());

print("工作经验:" + exp.trim());

print("个人简介:" + brief.trim());

print("简历链接:" + link.trim());

在输出面板,我们可以看到,姓名,性别,年龄,工作经验等信息。这些就是蜂巢数据根据脚本从网页中提取的数据。

细心的朋友可能发现了,简历链接的提取跟其它元素有些不一样,用了attribute这个函数。在58同城的网页上,点击简历后会打开另一个页面显示该简历的内容,这是一个网页链接,通过attribute函数我们就能获取这个链接地址,而不是网页上显示的文字。熟悉网页制作的朋友应该猜到了,attribute函数的第二个参数href指的就是网页链接中的href。

到目前为止,我们只是把提取的数据打印出来,接下来我们把提取的数据保存到数据库,方便以后查看。保存数据很简单,只需要调用save方法就可以了:

save([name.trim(),gender.trim(),age.trim(),exp.trim(),brief.trim(),link.trim()]);

现在运行脚本,我们可以在数据字段面板里看到保存的数据,如图8所示:

我们已经成功采集到了第一条简历,接下来我们把整个页面的简历都采集过来。

我们把网页拉到最下面,复制最后一条简历姓名的XPath,跟第一条对比下,看看有啥区别:

//*[@id="infolist"]/dl/dd[2]

//*[@id="infolist"]/dl[35]/dd[2]

大家应该注意到了,第一条XPath中间是dl(等同于dl [1]),最后一条XPath中间是dl[35]。也就是说,每条简历的XPath只有dl[*]中间的数字是不一样的,学过JavaScript的朋友可能已经想到了,可以通过一个循环语句来采集所有简历:

load("http://hz.58.com/searchjob/?key=android");

for(i = 1;i < 100;i++){

if(!has_element("//*[@id='infolist']/dl[" + i + "]/dd[2]"))

break;

name = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[2]");

gender = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[3]");

age = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[4]");

exp = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[5]");

brief = inner_text("//*[@id='infolist']/dl[" + i + "]/dt/span[2]");

link = attribute("//*[@id='infolist']/dl[" + i + "]/dt/a","href");

save([name.trim(),gender.trim(),age.trim(),exp.trim(),brief.trim(),link.trim()]);

}

上面代码中的has_element是蜂巢数据提供的一个辅助函数,用来判断网页元素是否存在,因为我们不知道网页里总共有几条简历,所以需要通过has_element进行检测。运行这段代码后,我们会在数据字段面板里看到总共采集了35条简历,如图9所示:

单个网页上的简历采集完了,但58上搜到的简历不只一页,接下来我们看看怎么用蜂巢数据采集多个页面的数据。

把网页拉到最下面,在第2页的数字上右击鼠标,选择复制链接地址,用同样的方法我们复制第3页的链接地址对比下各个页面的区别,如图10所示:

http://hz.58.com/searchjob/pn2/?key=android

http://hz.58.com/searchjob/pn3/?key=android

对比第2页和第3页的链接地址,我们发现只有中间的pn2和pn3是不一样的,同样的我们可以通过一个循环分别打开各个页面进行采集:

for(a = 1;a <= 5;a++){

load("http://hz.58.com/searchjob/pn" + a + "/?key=android");

for(i = 1;i <= 100;i++){

if(!has_element("//*[@id='infolist']/dl[" + i + "]/dd[2]"))

break;

name = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[2]");

gender = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[3]");

age = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[4]");

exp = inner_text("//*[@id='infolist']/dl[" + i + "]/dd[5]");

brief = inner_text("//*[@id='infolist']/dl[" + i + "]/dt/span[2]");

link = attribute("//*[@id='infolist']/dl[" + i + "]/dt/a","href");

save([name.trim(),gender.trim(),age.trim(),exp.trim(),brief.trim(),link.trim()]);

}}

这里我只采集了5个页面,因为再后面的简历大部分可能都是过时的,没必要采集。具体采集几页,大家根据实际需求来设置就可以了。

脚本的编写算是告一段落了,到目前为止,我们都在任务编辑模式下工作,采集到的数据也没有真正保存到数据库,关闭任务编辑窗口后采集到的数据就会消失。接下来我们在真实环境下运行脚本。

点击工具栏上的保存按钮保存任务,然后在任务面板里鼠标右击Android程序员,选择开始任务,如图12所示:

任务运行结束后,鼠标右击Android程序员,选择查看数据,我们就可以在新打开的标签里看到采集到的数据了,这些数据已经保存在数据库里了,关闭蜂巢数据后也不会丢失。你还可以选择导致数据到Excel进一步处理。如图13所示:

以后每天我只需要打开蜂巢数据,运行一遍Android程

序员任务,就能采集到当天更新的Android程序员简历,而且蜂巢数据已经帮我过滤过重复的简历,省了我不少时间。

三、结尾

通过本文大家应该对“蜂巢数据”的使用方法已经有所了解,只要会点JavaScript编程基础,就可以很方便地编写脚本采集你所需要的内容。

由于篇幅的原因,这里我就不深入去讲解怎么用脚本筛选简历,无非就是通过JavaScript对提取到的数据进行分析,我相信大家熟悉了JavaScript语法后,这些都不是难事。

除了文中提到的简历筛选,“蜂巢数据”可以做的事还很多。比如找工作筛选职位,行业数据分析,论坛回帖跟踪等。希望“蜂巢数据”能对你有所帮助。

猜你喜欢
脚本蜂巢网页
基于HTML5与CSS3的网页设计技术研究
走进科学
基于HTML5静态网页设计
自动推送与网站匹配的脚本
换蜂巢
搜索引擎怎样对网页排序
友谊的小船说翻就翻
火星上的“蜂巢”
举一反三新编
愚公移山