基于Python的51-job数据抓取程序设计

2018-07-06 06:08崔玉娇孙结冰祁晓波
无线电通信技术 2018年4期
关键词:选择器爬虫职位

崔玉娇,孙结冰,祁晓波,凌 强,朱 勇

(黑龙江大学 电子工程学院,黑龙江 哈尔滨 150080)

0 引言

随着互联网时代的高速发展,大量的数据可以通过互联网来获得,可以足不出户就能获知世界上的千变万化[1]。我们可以在互联网上获取招聘信息,而不再局限于报纸、杂志等纸质媒介,这使得求职者可以快速有效地获得心仪的招聘信息。每年的9月和4月都是毕业生找工作的高峰时期,快速有效地获得招聘信息成为求职过程中关键一步。为此,本文设计了一款基于python的爬虫程序,目前国内比较著名的求职软件有“智联招聘”“前程无忧”“58同城”等,本文主要对“前程无忧”的招聘信息进行抓取并分析。现有的数据抓取程序抓取方式单一,用户不能选择最快的抓取方法,该程序针对此问题进行了进一步的优化,设计3种数据抓取的方法,用户可自行选择,并且可以输入关键字,匹配招聘信息的地点。设计更合理,则用户使用体验效果会更好[2]。

本文提出的程序通过爬虫获取职位信息,包括:工作名称、标题、地点、公司名称、待遇范围、工作内容、招聘网址以及发布日期。并将获得的信息保存在本地,以供后续的数据挖掘及分析。本文的爬虫程序包含3种爬虫的方法,包括Re、XPath、BeatuifulSoup,用户可以自行选择想要的爬虫方法,并且输入职位的关键词,通过关键词匹配,获得相应的职位信息。

1相关概念

1.1 Python语言

Python语言语法简单清晰、功能强大,容易理解。可以在Windows、Linux等操作系统上运行;Python是一种面向对象的语言,具有效率高、可简单地实现面向对象的编程等优点[3-4]。Python是一种脚本语言,语法简洁且支持动态输入,使得Python在很多操作系统平台上都是一个比较理想的脚本语言,尤其适用于快速的应用程序开发[5]。Python 包括针对网络协议的各个层次进行抽象封装的网络协议标准库,这使得使用者可以对程序逻辑进行进一步的优化。其次,Python 非常擅长处理字节流的各种模式,具有很快的开发速度[6-7]。

1.2 网络爬虫

网络爬虫[8](Web Crawler),是一种按照一定的规则,自动提取Web网页的应用程序或者脚本,它是在搜索引擎上完成数据抓取的关键一步,可以在Internet上下载网站页面。爬虫是为了将Internet上的网页保存到本地,以供参考[9-10]。爬虫是从一个或多个初始页面的URL,通过分析页面源文件的URL,抓取新的网页链接,通过这些网页链接,再继续寻找新的网页链接[11],反复循环,直到抓取和分析所有页面。当然这是理想情况下的执行情况,根据现在公布的数据,最好的搜索引擎也只爬取整个互联网不到一半的网页[12]。

2 程序设计

本文的爬虫程序主要分为5个模块,首先根据Request URL获取需要爬取数据的页面,通过Re、XPath、BeautifulSoup三种方法,利用关键词筛选符合条件的职位信息,其中包括工作名称、标题、地点、公司名称、待遇范围、工作内容、招聘网址以及发布日期,并保存在本地,以便后续的数据挖掘及分析。

2.1 获取网页信息

爬取网页信息之前需要获取网页的信息,并从中找出需要的信息进行抓取。首先打开Chrome浏览器,进入前程无忧的网页,打开开发者选项,找到其中的network,获取URL以及请求头中的headers[13]。在preview中可以看到当前网页的源代码,可以从源代码中找到需要爬取的信息,即工作名称、标题、地点、公司名称、待遇范围、工作内容、招聘网址以及发布日期,并找出当前页与下一页的offset值,以便在以下的爬虫设计中使用。

2.2 主程序设计

将BeautifulSoup、XPath、Regex三种方法的文件名打包成字典,并标上序号,设计进入程序的页面,在页面上显示提示信息,请用户选择一种爬虫方法,根据用户的选择,进入对应的程序,待用户输入需要查询的职位关键词之后启动爬虫程序,开始抓取数据[14]。在抓取完毕之后,提示用户数据抓取完毕,以保存至本地文件,以供用户的使用及分析。

2.3 Re程序设计

正则表达式(Re)是对字符串(包括普通字符(例如,a~z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”[15],这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。

根据上文获取的网页信息,可以将所需信息的字符串用Re表示出来,其中:

‘.*?/.*?(d+)’ #获取当前页数

.*?

‘'.*?

.*?

‘ ’#获取工作地点

‘’#获取工资

‘’#获取工作发布的日期

(.*?)

通过获取的日期,用户可以了解最新的职位信息。根据职位的详细信息,求职者可以快速地了解到公司的要求以及职位的相关工作信息。通过上述的正则表达式获取的信息,存入本地的Excel文件,方便求职者查看。

2.4 XPath程序设计

XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言[16]。XPath基于XML的树状结构,有不同类型的节点,包括元素节点、属性节点和文本节点,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSLT间的语法模型。但是XPath很快地被开发者采用来当作小型查询语言。

XPath相对于Re简单一些,Re语言容易出错,导致无法正确地获得需要的信息,通常可以在Chrome中添加XPath Helper插件,可以在查看网页源代码是直接复制成XPath的格式,方便且通常不容易出错。

在XPath程序中,其中:

‘div[@class="rt"]/span[@class="dw_c_orange"]’#获取当前页数

‘∥div[@id='resultList']/div[@class='el']’#获取工作列表

‘./p[@class='t1 ']/span/a’#获取工作名称

‘./p[@class='t1 ']/span/a/attribute::href’#获取职位链接

‘./span[@class='t2']/a/text()’#获取公司名称

‘./span[@class='t3']/text()’#获取工作地点

‘./span[@class='t4']/text()’#获取工资

‘./span[@class='t5']/text()’#获取职位发布的日期

‘∥div[@class='bmsg job_msg inbox']/text()’ #获取职位详细信息

通过XPath和Re的代码对比,可以明显发现,XPath的代码比Re的代码要简洁。

2.5 BeautifulSoup程序设计

BeautifulSoup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能[16]。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。不需要考虑编码方式,除非文档没有指定一个编码方式,这时,BeautifulSoup就不能自动识别编码方式了。然后,仅仅需要说明一下原始编码方式就可以了。

2.5.1 解析库

本文介绍几种python解析库,并作比较,如表1所示,本文所用到的解析器是python标准解析器。

表1 解析库

解析器使用方法优势劣势Python标准解析器BeautifulSoup(makeup,″html.parser″)Python的内置标准库、执行速度适中、文档容错能力强Python2.7.3或3.2.2前的版本中文容错能力差lxml HTML解析器BeautifulSoup(makeup,″lxml″)速度快、文档容错能力强需要安装C语言库lxml XML解析器BeautifulSoup(makeup,″XML″)速度快、唯一支持XML的解析器需要安装C语言库html5libBeautifulSoup(makeup,″html5lib″)最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档速度慢、不依赖外部扩展

2.5.2 标签选择器

标签选择器可以选择元素,获取名称、属性、内容,可进行嵌套的选择,能够获取子节点、子孙节点、父节点、祖先节点等。标签选择器可分为标准选择器和CSS选择器,标签选择器可以根据标签名、属性、内容查找文档,有两个常用的函数,其中,find_all(name,attrs,recursive,text,**kwargs)用来返回所有符合条件的元素;find(name,attrs,recursive,text,**kwargs)用来返回第一个符合条件的元素。CSS选择器通过select()直接传入CSS选择器即可完成元素的选择。

在本文设计的程序中,选择了CSS选择器,使用select()函数完成数据的选择,其中:‘int(str(soup.select('div.rt span.dw_c_orange')[0].nextSibling))’#获取当前页数

‘div.dw_table > div.el’ #获取工作列表;

‘.p.t1 span a’ #获取工作名称;

‘p.t1 span a’ #获取职位链接;

‘span.t2 a’ #获取公司名称;

‘span.t3’ #获取工作地点;

‘span.t4’ #获取工资;

‘.span.t5’ #获取职位发布的日期;

‘div.job_msg’ #获取职位详细信息

3 实验结果

利用本文设计的爬虫程序,进行了如下实验:首先进入主程序,点击运行程序,程序返回如图1的界面。

接着,如图2所示,输入数字“2”选择BeautifulSoup解析方式,并输入关键词python启动爬虫,程序正常运行。

图2 选择解析方式并输入关键词

程序运行完毕后,在本地文件夹中可以找到以“python职位”命名的Excel文件,打开文件可看到如图3所示的信息。

图3 保存到本地的文件

4 结束语

本文根据Python语言简洁易读的特性设计了3种方法的爬虫程序,用户可以自行选择数据解析的方法,并输入需要查询的关键词,即可从庞大的职位数据中提取出需要的数据,方便快捷。本程序通过职位的关键词、工作地点等信息的匹配,在一定程度上为使用者提供了便利。提取出的详细的职业信息描述,可进行进一步的分词,并统计词频,观察单词出现的频率,可更加快速地了解公司及相应职位的要求,找到符合求职者的招聘信息。

[1] 房瑾堂.基于网络爬虫的在线教育平台设计与实现[D].北京:北京交通大学,2016.

[2] 王碧瑶.基于Python的网络爬虫技术研究[J].数字技术与应用,2017(5):76-76.

[3] 周中华,张惠然,谢江.基于Python的新浪微博数据爬虫[J].计算机应用,2014,34(11):3131-3134.

[4] 涂小琴.基于Python爬虫的电影评论情感倾向性分析[J].现代计算机,2017(35):52-55.

[5] 郭丽蓉.基于Python的网络爬虫程序设计[J].电子技术与软件工程,2017(23):248-249.

[6] Lutz M.Learning Python[M].北 京:机械工业出版社,2009.

[7] 刘志凯,张太红,刘磊.基于Web的Python3编程环境[J].计算机系统应用,2015,24(7):236-239.

[8] 王大伟.基于 Python的Web API自动化测试方法研究[J].电子科学技术,2015,2(5):573-581.

[9] Hetland M L.Python基础教程[M].北京:人民邮电出版社,2014:243-245.

[10] 涂辉,王锋,商庆伟.Python3编程实现网络图片爬虫[J].电脑编程技巧与维护,2017(23):21-22.

[11] 高森.Python网络编程基础[M].北京:电子工业出版社,2007.

[12] 周立柱,林玲.聚焦爬虫技术研究综述[J].计算机应用,2005,25(9):1965-1969.

[13] 姜杉彪,黄凯林,卢昱江,等.基于Python的专业网络爬虫的设计与实现[J].企业科技与发展,2016(8):17-19.

[14] 陈琳,任芳.基于Python的新浪微博数据爬虫程序设计[J].信息系统工程,2016(9):97-99.

[15] 刘娜.Python 正则表达式高级特性研究[J].电脑编程技巧与维护,2015(22):12-13.

[16] 齐鹏,李隐峰,宋玉伟.基于Python的Web数据采集技术[J].电子科技,2012,25(11):118-120.

猜你喜欢
选择器爬虫职位
领导职位≠领导力
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
74151在数据选择和组合逻辑电路中的灵活应用
DIV+CSS网页布局初探
深入理解CSS3结构伪类选择器
大数据背景下校园舆情的爬虫应用研究
职位之谜与负谤之痛:柳治徵在东南大学的进退(1916—1925)
大数据环境下基于python的网络爬虫技术
美最高就业率地铁圈