基于Python的51-job数据抓取程序设计
2018-07-06崔玉娇孙结冰祁晓波
崔玉娇,孙结冰,祁晓波,凌 强,朱 勇
(黑龙江大学 电子工程学院,黑龙江 哈尔滨 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+)’ #获取当前页数
‘.*?