APP下载

自定规则的AJAX网页信息采集功能的设计

2016-11-09胡越张源伟雷军

物联网技术 2016年9期

胡越 张源伟 雷军

摘 要:当前互联网技术飞速发展,针对网络上存在的海量数据以及动态网站的出现,文中提出了一种用户自定规则的AJAX网页信息采集功能,该功能能够提取动态网站上的数据,避免垃圾信息的干扰。与传统信息提取系统相比,用户可以自定规则,确定目标网站,半自动化以及自定规则操作,使信息提取更加准确和高效。

关键词:自定规则;AJAX网页信息;PhantomJS;提取数据

中图分类号:TP393 文献标识码:A 文章编号:2095-1302(2016)09-0086-02

0 引 言

当前在数据量庞大的互联网世界中,网络上的信息存在诸多问题。虚假信息、重复信息、广告干扰等这些信息往往都是冗余或者无用的信息,加上互联网技术的发展与AJAX技术的兴起,许多站点从可维护性和增加用户体验的角度将数据与网页分离,通过AJAX从数据库动态生成数据,而有用的信息往往存在于这些数据中,但搜索引擎无法直接搜索到AJAX网页信息[1]。自定规则的动态网页信息能够采集AJAX网页信息,并且用户可以自由选取网站并自定采集规则,功能垂直,目标专一,能够高效且快速地获取网页信息。

1 AJAX网页信息生成原理

据中国互联网中心统计,当前中国的网站有百分之四十多都是动态网站,几乎占据了中国互联网的半壁江山,而日常人们主要通过搜索引擎来获取自己感兴趣的信息,搜索引擎的核心之一是网络蜘蛛(Web Spider)。网络蜘蛛通过给定的起始页面按照一定的规则提取页面中的链接,直到没有链接,蜘蛛才停止提取[2]。这其中的过程仅仅解析了网页的源代码,却没有把网页信息写入网页源代码中,因此爬虫收集的只是没有加载动态信息的网页资源。当用户浏览动态网页时,首先在浏览器的地址栏输入网页的URL,向对应的服务器发送请求获取该URL对应的页面,当获取到页面时,此时并没有获取到网页的信息,浏览器的JS(JavaScript)解析器会继续解析写在网页中的JS代码,作为动态网页,数据通过页面中的JS继续向服务器请求数据库中的数据,而传统的网络蜘蛛并没有执行这些后续请求,蜘蛛的功能仅相当于浏览器的第一个请求网页的动作,在浏览器中通过查看网页源代码可以看到一些AJAX信息并没有显示在源代码中,而网页中能够显示信息,正是由于浏览器中后续的JS解析。该过程的原理图如图1所示。

在该网页信息生成的过程中,只有当客户端请求到页面之后,再通过客户端中的JS解析器解析网页中的JS数据请求代码,才会从数据库请求数据并写入页面。

2 自定规则采集功能设计

根据前面所分析的原理可知,仅单纯的使用一个get请求来获取AJAX页面中的信息在原理上是不可行的,因为服务器端并不能解析JS代码,只有在客户端才能解析,服务器端只能够将网页原封不动地返回给客户端,存在于网页源代码中的JS数据请求并没有运行。作为一套信息采集系统,该系统的全部功能模块必须都放在服务器环境中,只有通过一个可以完全解析网页的引擎才能使服务器端解析JS获取网页信息。经过摸索和查找,认为JS的开源工具包PhantomJS可以完成该项功能。可以将PhantomJS引擎存放于服务器端,通过服务器端语言来调用,这里使用PHP语言。

2.1 自定规则功能结构的设计

属于一个网站的所有页面的结构基本类似,网站与网站之间的结构可以完全不同,也可以类似,但网页结构几乎不可能完全一样,即使存在轻微差别,也会导致一些信息的提取规则完全不同。因此一旦写死了某一个网站的提取规则,随着网站的改版,可能其中页面的结构发生了变化,仅HTML标签名属性发生变化就会导致抽取规则的改变,因此用户自定规则能够很好地解决问题[3-8]。提取信息的规则写在JS文件中,除开PhantomJS函数,用户只需要写提取网站信息的DOM规则。在前台设计一个用户上传规则和选取规则的功能,服务器端设定一个专门存放规则的文件夹,前台能够读取用户上传的规则,从而完成目标页面信息的提取。自定规则工作原理图如图2所示。

用户写入核心的DOM规则上传到规则库。当用户需要使用该规则时,前台可以加载规则库中的文件,通过选取指定的文件,服务器将文件名传入PhantomJS引擎中,接收网站的链接以目标网页进行信息提取,返回信息经处理后返回客户端。

2.2 PhantomJS与PHP通信

服务器中存放一个PhantomJS可执行文件,称其为PhantomJS引擎,该引擎通过命令窗口运行一个JS为后缀的文件,该文件中写入一些PhantomJS的接口函数和网页链接以及信息提取规则。作为单纯的信息提取,JS文件中的PhantomJS接口函数是固定的,它们可以完成解析和加载网页,使网页内部的JS源代码完全执行。PHP函数库中存在一个调用可执行文件的函数exec()。利用该函数调用PhantomJS可执行文件,PhantomJS运行用户自定规则的JS文件,从而进行动态信息的提取。例如exec("chcp 65001 && cd /d f:/phantomJS/phantomjs-2.0.0-windows && phantomjs sample.js {$url}",$arr,$i),该语句表示通过phantomJS执行sample.js文件,传入页面的链接为$url,返回的结果存入$arr中。Sample.js文件中的代码如下:

3 结 语

本文提出了一种能够自定规则提取AJAX网页信息功能的设计,通过测试能够成功提取动态AJAX网页信息,相较于传统的网络蜘蛛,自定规则设计可以更好更贴合用户需求来对指定网站进行信息提取,避免了虚假网站的干扰和重复信息的冗余。相较于传统的dom信息提取系统,该信息提取功能加入了PhantomJS包,能够提取传统dom无法提取的动态信息,功能得到了加强。

参考文献

[1]张小集,白清源.可自定规则的Ajax网页信息采集框架的开发[J].电脑开发与应用,2014,27(10):29-31.

[2]翁岩青.网页抓取策略研究[D].哈尔滨:哈尔滨工程大学,2010.

[3]徐超.基于DOM的网页净化方法研究[D].青岛:中国石油大学,2009.

[4]于静.基于页面主体提取的WEB信息抽取技术研究[D].南京:南京邮电大学,2013.

[5]刘冠军.Web对象提取检索系统的设计与实现[D].北京:北京大学,2008.

[6]李猛.基于DOM的web信息抽取的研究与实现[D].大连:大连理工大学,2008.

[7]王桂红.农产品市场价格web信息分析系统方法研究[D].沈阳:沈阳农业大学,2013.

[8]苏小鲁.基于DOM的HTML网页正文信息抽取模块的设计与实现[D].北京:北京邮电大学,2011.