林长谋 黄玮
摘要:互联网数据获取及分析是当前数据科学的一個重要部分。该文针对互联网中就业岗位数据获取与分析的过程基于Python构建了网络爬虫。并在通爬虫获取网络数据的基础上,对所获得的就业岗位数据进行预处理,最终可到供挖掘的数据。
关键词:Python;网络爬虫;数据分析
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2019)12-0006-02
开放科学(资源服务)标识码(OSID):
1 背景
随着信息技术的发展,大数据越来越成为热门的话题[1]。使用大数据技术对就业岗位市场进行数据的分析对于学生职业生涯的规划有较强的现实意义。而就业岗位的相关数据动态连续的创建于不同的人才市场,受数量多、分布广、格式不统一等因素的影响,不易采用人工进行数据的获取。因此也就更不利于相关信息的分析。为解决这一问题,本研究先针对性的进行网络爬虫[2]的设计,再基于分词技术[3]和TD-FID算法进行关键词的提取的统计。
2 网络爬虫的关键技术
爬虫是互联网时代用于获取主题内容的主流工具之一。其可从不同的站点获取预先设置好的主题内容。在本研究中使用Python,并调用BeautifulSoup、Requests等库及数据库技术,进行爬虫的构建。构建爬虫涉及的技术如下:
2.1 HTTP请求与响应与 URL
爬虫的工作原理基于http协议中的请求与响应机制[4]。在浏览器浏览某个网页时,需要使用HTTP协议将URL提交给服务器。服务器收到URL后根据URL中携带的信息处理将对方所请求的资源回传给浏览器端。
爬虫在运行时模拟浏览器与服务器的运行特征,模拟浏览器向服务器发送URL请求,接收对方的回复,并最终将接收到的数据转换成要保留的数据。由于互联网网页错综复杂,一次的请求与回复无法获取批量数据,因此需要对爬虫的流程进行规划设计,使之适应多页面跨页面的情况。
2.2 超文本语言
超文本语言[5]也称为HTML(Hypertext Markup Language),在该语言中规定了相关事项的标签,并采用配对标记的形式进行使用。例如为了表示一个表格,可以使用
图2展示了从51Job上相关招聘信息链接对应的HTML片段。可以看出标签的 href属性值是一个URL的链接,点击该链接后即可获得该职位的详细信息。
2.3 Web信息抽取
在获得目标网页的URL地址,通过请求可得到该网页内容。由于网页是HTML格式,中间嵌入了许多对于信息抽取不必要的标记。因此需要对数据进行一定的抽取。在具体Web页的抽取中,要根据页面的结构特点定位要抽取的信息。具体实践中,通过正则表达式可以高效的抽取具有固定特征的页面信息,准确性很高,而且由于现今的主流编程语言基本上都提供了操作正则表达式的封装API,所以可以很方便快捷地构建基于这种模式的web信息抽取系统。
3 爬虫的设计
对目标人才招聘网站进行分析,寻找其特点后决定采用带参数URL请求的方式,将所要查询的关键字传到服务器,由其搜索出满足条件的岗位数据。
基于上述特征,可进行爬虫的设计,其核心部分的流程如下:
Step 1:从初始页面开始爬取。
Step 2:解析网页内容,提取具体岗位信息的URL。
Step 3:将URL加入等解析队列。
Step 4:如果有下一页,则读取下一页,并转到Step 2.否则,转第5步。
Step 5:如果待解析队列不为空,则队列元素出队,并请求该元素对应的URL。
若待解析队列为空,则转Step 8
Step 6:解析回复内容,并进行Web信息提取,将岗位信息写入数据库。
Step 7:转Step 5
Step 8:结束。
4 数据的预处理
在爬虫的运行下,可获得大量的数据,为了解岗位数据的变化,便于进行数据挖掘,则需要对已经获取的数据进行预处理。
在数据库中保存的岗位信息数据除了有岗位名称、发布单位、发布时间、地点等内容外,关于岗位信息的数据包含在详情页中。由于详情页中的信息只进行了文本的提取,没有进一步的处理。因此在进行信息提取前需要进行文本的预处理。例如,一个岗位有如下要求:
(1)至少2年以上ASP.NE开发经验,深入了解.NET Framework框架;
(2)熟悉WEB开发流程,熟练掌握ASP.Net MVC、WebAPI框架;
(3)熟悉MS-SQL、MySql、Oracle等主流数据库;
……
对上述岗位要求进行分析,可知:岗位中的关键字与其他文档中的关键词不同。其他文档中的关键词由用词频的方式进行确认,而岗位要求中的关键词往往仅出现一次。另外,越是出现在文本前方的关键词就越重要。基于上述规律,使用Python的第三方工具包Gensim对岗位要求进行切片和停用词过滤,再按先后顺序排列,即可得到岗位要求中各要素的重要性序列。其中切片与停用词过滤的代码如下:
stoplist=open('stopword.txt','r',encoding="utf-8").read()
stoplist = set(w.strip() for w in stoplist)
segtexts=[]
for line in lines:
doc=[]
for w in list(jieba.cut(line,cut_all=True)):
if len(w)>1 and w not in stoplist:
doc.append(w)
segtexts.append(doc)
在采用上述代码进行分析后,便得求得该岗位信息的数据格式如表1所示:
5 结束语
在使用Python进行爬虫的设计后,在对所获得的文本使用Gensim进行分词处理和停用词过滤后,针对岗位信息中,关键字仅少量出现的情况,使用关键字出现的先后顺序设计重要性序列。最终完成数据的预处理工作。
参考文献:
[1] 温亮明, 张丽丽, 黎建辉. 大数据时代科学数据共享伦理问题研究[J]. 情报资料工作, 2019, 40(2): 38-44.
[2] 杨凌云. 主题网络爬虫关键技术的应用探讨[J]. 电脑编程技巧与维护, 2018(11): 33-35.
[3] 柳汨. 基于HTML语言的网页制作浅析[J]. 中小企业管理与科技: 上旬刊, 2016(1): 258.
[4] 冯佳捷, 王瑞. 中文分词技术对中文搜索引擎的查准率及查全率的影响[J]. 计算机光盘软件与应用, 2013, 16(6): 184, 259.
【通联编辑:谢媛媛】