基于AJAX的深网爬虫设计

2017-11-07 06:11孙龙李彦
现代计算机 2017年28期
关键词:爬虫队列网页

孙龙,李彦

(1.四川大学计算机学院,成都 610065;2.四川大学制造学院,成都 610065)

基于AJAX的深网爬虫设计

孙龙1,李彦2

(1.四川大学计算机学院,成都 610065;2.四川大学制造学院,成都 610065)

AJAX技术广泛应用在深网中,要实现对深网的AJAX页面数据采集,爬虫技术将面临新的挑战。在研究如何发现网页中包含超链接标签、AJAX事件的爬取元素,并有效遍历由事件触发的AJAX响应信息的基础上,提出一种AJAX深网状态模型,设计爬取算法。并通过实验验证该爬虫模型能够有效提升实现AJAX深网的爬取的覆盖率。

0 引言

深网(Deep Web),也称隐形网络(Invisible Web),或隐藏网络(Hidden Web),是万维网的一部分,其内容因种种原因无法被标准搜索引擎索引到。与深层网络相反的术语是表层网络。大量Web信息深埋于网站之下,传统的搜索引擎无法寻找它们,发现它们,取回深网之中的内容,被传统搜索引擘索引的那部分只是表层网络。无法测量和严格估计的深网的大小,因为大多数的信息被隐藏或锁定在数据库内。早期的估算表明,深网的信息要比表层网络大几个数量级,深网是400倍至550倍大于表层网,其大小约有7.5PB[1]。然而,由于不断有更多的信息和网站被添加,可以估算深网应是以指数级的数量成倍增长。随着AJAX技术的不断发展,越来越多的深网采取了这一技术。AJAX深网的爬取也逐渐成为学者研究的一个热点。

1 AJAX深网爬取

网络爬虫也被称作网络蜘蛛[2],或自动网络索引[3],是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。

网络爬虫一般从一个URL列表中开始抓取,这个列表称作种子。当爬虫读取这些列表时,它会识别出URL列表中网页所包含的超链接并将其添加到要爬取的队列中,称为爬取边界。爬取边界的URL会按照规定策略递归地进行访问。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。如果爬虫正在进行网站文档获取,它会将其访问过的网页进行复制和保存。另外,所有被爬虫抓取过的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索。这些经常存储在网站上以被查看、阅读和导航的文档,会被以“快照”的方式进行保存到本地[4]。归档被称为仓储,用来存储和管理网页的集合。仓库只存储HTML页,这些页被存储为不同的文件,仓储库与存储数据的其他系统类似,就像现代数据库一样。唯一不同的是,仓储库不需要数据库系统提供的所有功能。仓储库存储由爬虫检索的网页的最新版本[5]。

虽然无法直接发现特定的网站服务的内容,以便可以对其建立索引,但这个网站可以可能通过间接的方式进行访问。为了发现网站内容,浅网采取的搜索引擎从已知协议的虚拟端口号跟踪超链接的技术,对于深网内容基本无效。举例说,这些爬虫不会去尝试发现AJAX结果生成的动态页面。深网爬取也成倍增加了待爬取的网页链接,一些爬虫只从网页代码中形如<a href="URL">取出一部分URL。其中通过AJAX生成的页面会给爬虫带来问题。在这方面学者已有一些研究,陆亮等采取rhino组件实现了一个AJAX爬虫[6],以分析JavaScript代码来获取URL,但该设计中缺乏对页面状态的遍历,爬取AJAX内容十分有限;郭津丞等提出了一个用WebKit模拟JavaScript动作的爬虫模型[7],但该模型在摸拟AJAX事件触发机制还比较欠缺。要解决好AJAX深网的内容爬取,必须将网页状态遍历,事件触发,XML解析技术有机融合,才能有效实现更大范围的内容覆盖和更高的爬取效率。

2 算法原理

与静态网页相比,AJAX网页是在静态网页的基础上,通过JavaScript实现网页内容的动态变化。静网页一般通过一系列<a href=’XXXXX’>超链接到其他网页,而AJAX网页可以通过通定义各种事件实现同一网页内容的变化,或者到其他网页的跳转。

2.1 状态定义

为了实现对AJAX的爬取,我们需要针对AJAX网页建立相应的模型。一个网站的状态模型可以用下述元组表示:

<Dom,element,event,action>

Dom表示网页对象模型结构

Element网页内的各种元素,名称及状态属性;

Event绑定于元素的事件

Action事件触发后,网站相应的操作

在爬取过程中,由于事件的触发,dom相应发生更新,element元素发达变化,包括新的元素,以及元素新的状态,与绑定的事件又形成了新元组。我们将上述元组中element元素组以<name,status>表示,则可以用<name,status,event,action>简洁而唯一地标示出包含状态的动作元素,本文以actionlist命名。

2.2 算法设计

爬取AJAX相应的算法也可描述为:

第一步:从爬取队列中指定链接;将提取URL作为crawler任务线程准备加入到事件队列。

第二步,若事件队列是超链接,则抓取新的网页,生成dom;若是AJAX事件,则触发AJAX事件并获取响应内容,刷新dom;

第三步,对dom的元素进行解析,根据网页的超链接、绑定AJAX事件的元素,元素的状态,生成元组。

第四步,遍历元组,由相应的element,及event,对应生成actionlist;

第五步,若未达到最大爬取深度,则将actionlist进行去重处理,并加入爬取队列;

第六步,按此过程进行新一轮的迭代。继续转之前爬取步骤。

具体实现为:

其主要功能介绍:addactionlist添加动作,动作队列actionlists存储网页事件动成作队列,根据事件动作队列,生成相应爬取任务,启动fecher抓取相关网页。在整个抓取过程中,根据动作元组hash,对网址进行去重处理duplicate removal。去重之后的网页进行解析,并存储。抓取的过程中也根据网页含的链接、事件动作,更新actionlist,进行广度遍历。Fetcher内部采用生产者消费者模式,QueueFeeder线程不断从Generator中获取抓取任务,FetcherThread则负责消费这些任务-抓取页面。

在这些包中,crawler和fecher包是整个爬取系统的核心功能包,其中,crawler包调用fecher抓取页面,从页面中提取链接,生成种子,注入种子到抓取队列,fecher从种子队列中取出种子,执行抓取任务。两个模块的主要功能如图1所示。

图1 Crawler主要功能示意图

3 实验比较

我们将该爬虫与常规爬虫在实验环境中进行了比较,以Tomcat服务器,用JSP+AJAX从数据库生成动态网页,我们采取httpclient+htmlunit+Selenium组件,从各大专利网站以广度优先方式进行爬取,以网站域名和专利类别索引为单位来切分爬取工作,每个分类对应一个map任务。系统要维护一个全局一索引表,用来记录哪些url已经爬取过,哪些尚未爬取,哪些正在爬取。这样可以实现在hadoop上的分布式知识爬取目标。并与传统爬虫heritrix进行了比较。

从表1中可以看出,相对较传统爬虫,AJAX爬虫能够在AJAX动态网页上爬取更多的网页内容。分析其原因,传统的爬虫(如heritrix)仅能从单一的<a href=..>标签中去判断下一步要抓取的队列。而AJAX爬虫可以从网页中所有的元素绑定的事件中去触发下一步抓取的队列。因此,其抓取范围和内容远大于普通爬虫。另外,AJAX爬虫的抓取速度又远低于传统抓虫,其原因于,AJAX爬虫需要解析绑定JavaScript事件的所有网页元素,传统爬虫仅需解析单一的超链接标签;AJAX爬虫还需要通过模拟组件httpclient+html⁃unit+Selenium来模拟对AJAX事件的触发,十分耗时;传统爬虫则直接用http get命令去下载url的内容,相对快得多。

表1 爬虫性能比较

[1]Bergman,Michael K(August 2001).The Deep Web:Surfacing Hidden Value.The Journal of Electronic Publishing.7(1)。

[2]Spetka,Scott.The TkWWW Robot:Beyond Browsing.NCSA.Archived from the Original on 3 September,2004.

[3]Kobayashi,M.&Takeda,K.(2000).Information Retrieval on the Web.ACM Computing Surveys.ACM Press,32(2):144-173.

[4]Masanès,Julien(February 15,2007).Web Archiving.Springer.p.1.ISBN 978-3-54046332-0.

[5]Patil,Yugandhara et al.(2016).Review of Web Crawlers with Specification and Working.International Journal of Advanced Research Computer and Communication Engineering,5(1):4.

[6]陆亮,李东.支持AJAX的网络爬虫设计与实现[J].智能计算机与应用,2013(06):57-59+62

[7]郭津丞,冯超,张磊.基于WebKit的网络爬虫[J].现代电子技术,2013(18):62-64.

Design of Deep Web Crawler Based on AJAX

SONG Long1,LI Yan2
(1.CollegeofComputerScience,Sichuan University,Chengdu 610065;2.CollegeofManufacturing,SichuanUniversity,Chengdu 610065)

AJAX technology is widely used in the deep network,yet implementing the data acquisition of the AJAX pages of the deep web by the web crawler technology faces huge challenges.On the basis of studying how to find the hyperlink information in the webpage,and effectively tra⁃versing the event triggered Ajax response information,proposes a AJAX deep web state model and designs a crawling algorithm.Experi⁃ments show that the crawler model can effectively enhance the coverage rate of AJAX deep web crawling.

爬虫;AJAX;搜索引擎

1007-1423(2017)28-0072-04

10.3969/j.issn.1007-1423.2017.28.019

孙龙(1975-),男,四川巴中人,研究方向为软件工程、人工智能

2017-08-01

2017-09-25

Crawler;AJAX;Search Engine

猜你喜欢
爬虫队列网页
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
基于HTML5与CSS3的网页设计技术研究
队列队形体育教案
队列里的小秘密
基于多队列切换的SDN拥塞控制*
目前互联网中的网络爬虫的原理和影响
在队列里
基于CSS的网页导航栏的设计
基于HTML5静态网页设计