陈康琛 刘进进 陈兴雷
摘要:为了解决大学生获取就业信息滞后、时间成本高昂以及与用人组织间信息不对称的问题,提出运用网络爬虫信息技术和邮件推送技术的设计思想,以自动化控制减少人工操作为实现途径,开发和研究学生就业信息挖掘与推送系统。系统包括输入加载模块,信息抓取模块,结果输出模块和邮件推送模块。以Python计算机设计语言为基础,进行代码编译,实现以全国大学生就业公共服务立体化平台(新职网)为自动爬取对象,对网站工作日当天信息JSON数据源下载存储,信息抓取模块与邮件推送模块相配合,在索引JSON数据库进行深度挖掘后,自动将输出汇总结果推送至邮箱。系统操作简单,高效可靠,在毕业季中有较大推广应用可能。
关键词:python;网络爬虫;就业信息;邮件推送
中圖分类号:TP391 文献标识码:A
文章编号:1009-3044(2019)19-0006-03
Abstract: In order to solve the problems of inadequate access to employment information, high time cost and asymmetric information between college students and employers, this paper puts forward the design idea of using web crawler information and email push technologies to develop and study a mining and pushing system of student employment information, so that the manual operation can be reduced through an automatic control. The system includes input loading module, information capture module, result output module, and email push module. The code is compiled on the basis of Python computer design language. Taking NCSS (New Career Service Site for Students) as the automatic crawler object, it downloads and saves the daily information JSON data source from the website on workdays. Combined with information capture module and email push module, the output summary results can be automatically pushed to the mailbox after in-depth mining of index JSON database. The system is efficient, reliable and easy to use, which may be widely used in the graduation season.
Key words: python; web crawler; employment information; email push
1 引言
近年来,大学生毕业人数逐年增长,2019年全国高校毕业生人数预计834万[1],再创历史新高。大学生就业难已成为社会关切的热点问题之一。面对最难就业季和就业岗位信息的动态更新,大学毕业生每天需要进行烦琐的人工查询和筛选操作,耗费大量的时间成本,同时也无法及时得到大量有效的招聘信息,更有招聘信息检索不当和数据挖掘深度不够的情况发生,使其与心仪的就业岗位失之交臂。目前在我国网络招聘市场中,已呈现出智联招聘、前程无忧和中华英才网这类综合性招聘网站领先,其他地方性、行业性、搜索型和社交型等多种网站并存发展的多元格局[2]。虽然就业信息平台已搭建完成,但都还需大学生逐个进行人工查询、筛选的操作,耗时耗力,从用户体验来说,不够自动化。因此,本文设计一款就业信息挖掘与推送系统,对保证就业信息时效性,使大学生自动化高效定制就业信息具有重要意义,为全国大学生就业信息获取提供了新的方法和途径。
2 项目相关技术和设计
2.1 Python
Python是一种简单易学、功能强大的计算机程序设计语言, 它有高效率的高层数据结构, 简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,让人更加容易阅读、调试和扩展,再加上其高度集成了解释性、交互性、面向对象性和丰富的可扩展性等特点[3],可根据情况,导入多种模块,大量的第三方函数库对其进行了支持,使得Python语言在爬虫和大数据处理分析方面具有明显优势,特别适用于快速的应用开发,也成为当前程序设计的热门语言之一。
本项目,运用python中的os, requests, BeautifulSoup模块编写自定义函数CXRD,实现新职网JSON源文件的下载;requests, lxml, BeautifulSoup模块编写自定义函数XJCX,实现JSON数据源的解析;smtplib, MIMEText模块编写自定义函数sendmail,实现电子邮件的自动推送。通过以上自定义函数的调用,再结合re, time, tkinter, tkinter.filedialog, tkinter.messagebox模块和正则表达式对大学生就业信息挖掘与推送软件进行编译,便能够达成就业信息网页自动获取、岗位详情信息主动解析和汇总结果电子邮件推送等目标。
2.2 网络爬虫
网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或Web信息采集器,是一个自动下载网页的计算机程序或自动化脚本,是搜索引擎的重要组成部分[4]。网络爬虫的基本实现原理及过程:通过互联网获取网页初始URL链接,将初始网页存储至数据库,并对初始网页中出现的新URL链接进行爬取,始终重复上述过程,直至满足设定的停止条件。若无停止条件,将直到无法获取新的URL链接为止。以此实现对网页数据的遍历、挖掘和保存。本项目即利用Python中对网页内容的自动爬取功能,完成对网站数据的收集与更新。
2.3 正则表达式
JSON指的是类似JavaScript对象的一种数据格式,这种数据格式是服务器和客户端数据交互的媒介。在对网站JSON数据源下载存储后,基于正则表达式进行匹配,对JSON文本数据进行数据清洗,以极其简单的操作方式从烦琐杂乱的字符串中提取我们想要的特定部分。例如:本项目中,通过recNames=re.findall('.recName.*?(?=,)',line)的方式进行信息提取,实现对“,”前含有“recName”的字符串的自动匹配并输出内容。其中, '.recName.*?(?=,)'即为正则表达式。
2.4 网站Robots协议
Robots.txt是存放于网站目录下的ASCII编码的文本文件,它通常告诉搜索引擎蜘蛛程序在此网站中可以抓取和禁止抓取的内容[5],直接标明爬虫服务程序在其网站上的许可抓取信息范围,此协议的存在是为了保护网站数据和敏感信息。
大学生就业信息挖掘与推送系统爬取信息源采用新职网数据源,经过浏览器访问如下网址http://www.ncss.org.cn/robots.txt,此页面显示结果为
“404 Not Found”即未设置robots.txt,因此,在未经新职网授权的情况下,网络爬虫可直接对其数据源的所有信息内容进行抓取,即其数据源向社会开放。
2.5 系统运行设计
要对有效的就业招聘信息进行搜集,首先需要确定就业信息发布于哪些网站上。本项目以新职网(http://ncss.org.cn)为例,对专业就业信息进行获取,人为设定专业对应的筛选关键词。在对目标网址和关键词确立完成后,便是对其URL所对应的网页详情内容进行爬取,找出含有以上筛选关键词的信息。完成信息抓取后,设定以方便阅读的格式进行本地保存,以一条信息对应一条链接输出为宜。最终,将爬取汇总结果通过QQ邮箱一键推送。
3 项目系统分析及实现
3.1 输入加载模块
首先导入Beautiful Soup模块,它是一个具有强大功能的工具箱,内置python支持的大量函数,可实现lxml网页解析、文檔树的遍历和搜索以及CSS选择等功能,为本次设计的系统python代码进行灵活调用函数提供了较大帮助。
随后对专业对应的筛选关键词进行导入,利用tkinter模块中的filedialog和messagebox标准对话框模块,生成文件选择对话框,获取专业检索词的文件路径,运用open(,[r,w,a,b])函数读取检索词,其中r:读操作;w:写操作;a:添加操作,b:二进制存取操作,此模块采用r只读操作即可完成设计需求,采用文件对话框txt文本导入设计是因为可直接导入数个专业检索词,避免在代码运行过程中逐个输入文本情况的发生。爬虫脚本内容如下:
在对新职网JSON数据源下载本地存储完成后,利用re模块构建设置正则表达式,并基于正则表达式进行匹配,对获取到的JSON数据进行筛选和匹配,得到符合条件的“recName”, “recId”, “jobTitle”, “jobId”数据内容,为信息抓取模块中网页详情检索和结果输出正常创造前提条件。
3.2 信息抓取模块
在输入加载模块运行完成后,便需要运用岗位URL查询信息,进行网页详情页面的检索词检索,为了防止因网络波动或服务器不稳定造成连接失败的问题,设定服务器重连次数“3”,运用BeautifulSoup和lxml模块对新职网职位网页进行解析,解析结果为新职网网站html代码,通过对整个新职网网页html代码的分析总结,得出使用BeautifulSoup中的方法find_all查询匹配li标签中的职业名称和div标签中的招聘企业所处地域,之后,若职位详情页面中含有检索词字段即返回该页面的URL,否则,直接返回空值。如下所示:
3.3 结果输出模块
在信息抓取模块运行完成后,便是将检索筛选结果进行本地保存,将会以"jobTitle":"**"(职位名称)、"recName ":"**"(企业名称)、"address":**(企业地址)、URL链接(网页详情)的形式保存为txt文本文档,直接将职位名称、招聘企业名称、企业所在省市和职位详情链接进行显示,方便推送邮件时收件方进行阅读查看,至此,检索结果输出完成。
3.4 邮件推送模块
电子邮件进行一键推送功能的实现采取自定义发送电子邮件函数的方法,导入smtplib, MIMEText模块,该模块简单定义了一个SMTP客户端,对SMTP协议(简单邮件传输协议)进行简单的封装,可用于向任何互联网机器发送使用SMTP协议的邮件,将邮件服务器及短号、发送方邮箱和邮箱授权码等信息进行输入编译后,依然按照文件对话框的方式导入收件方邮箱,在有需要的情况下进行输出结果的批量用户一键发送,方便快捷。实现代码如下:
4 项目系统运行试验
在完成大学生就业信息挖掘与推送系统代码编译后,需要对整个代码及设计模块的运行进行试验验证, 测试整个系统的可靠性和高效性,所得试验具体参数记录结果如下表所示: