网络爬虫
1
概述
引言
随着网络的迅速发展,**网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎
(Search Engine)
,例如传统的通用搜索引擎
AltaVista
,
Yahoo!
和
Google
等,作为一个辅助人们检索信息的工具成为用户访问**网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:
(1)
不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
(2)
通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3)
**网数据形式的丰富和网络技术的不断发展,图片、数据库、音频
/
视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
(4)
通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问**网上的网页与相关的链接,获取所需要的信息。与通用爬虫
(generalpurpose web crawler)
不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
1
聚焦爬虫工作原理及关键技术概述
网络爬虫是一个自动提取网页的程序,它为搜索引擎从**网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的
URL
开始,获得初始网页上的
URL
,在抓取网页的过程中,不断从当前页面上抽取新的
URL
放入队列
,
直到满足系统的一定停止条件,如图
1(a)
流程图所示。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的
URL
队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页
URL
,并重复上述过程,直到达到系统的某一条件时停止,如图
1(b)
所示。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:
(1)
对抓取目标的描述或定义;
(2)
对网页或数据的分析与过滤;
(3)
对
URL
的搜索策略。
抓取目标的描述和定义是决定网页分析算法与
URL
搜索策略如何制订的基础。而网页分析算法和候选
URL
排序算法是决定搜索引擎所提供的服务形式和爬虫网页抓取行为的关键所在。这两个部分的算法又是紧密相关的。
2
抓取目标描述
现有聚焦爬虫对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念
3
种。
基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。根据种子样本获取方式可分为:
(
1
)
预先给定的初始抓取种子样本;
(
2
)
预先给定的网页分类目录和与分类目录对应的种子样本,如
Yahoo!
分类结构等;
(
3
)
通过用户行为确定的抓取目标样例,分为:
a)
用户浏览过程中显示标注的抓取样本;
b)
通过用户日志挖掘得到访问模式及相关样本。
其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。
现有的聚焦爬虫对抓取目标的描述或定义可以分为基于目标网页特征,基于目标数据模式和基于领域概念三种。
基于目标网页特征的爬虫所抓取、存储并索引的对象一般为网站或网页。具体的方法根据种子样本的获取方式可以分为:(
1
)预先给定的初始抓取种子样本;(
2
)预先给定的网页分类目录和与分类目录对应的种子样本,如
Yahoo!
分类结构等;(
3
)通过用户行为确定的抓取目标样例。其中,网页特征可以是网页的内容特征,也可以是网页的链接结构特征,等等。
作者:
齐保元
2006-1-10 10:11
[编辑本段]
2
爬虫技术研究综述
基于目标数据模式的爬虫针对的是网页上的数据,所抓取的数据一般要符合一定的模式,或者可以转化或映射为目标数据模式。
另一种描述方式是建立目标领域的本体或词典,用于从语义角度分析不同特征在某一主题中的重要程度。
[编辑本段]
3
网页搜索策略
网页的抓取策略可以分为深度优先、广度优先和最佳优先三种。深度优先在很多情况下会导致爬虫的陷入
(trapped)
问题,目前常见的是广度优先和最佳优先方法。
3.1
广度优先搜索策略
广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。也有很多研究将广度优先搜索策略应用于聚焦爬虫中。其基本思想是认为与初始
URL
在一定链接距离内的网页具有主题相关性的概率很大。另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。
3.2
最佳优先搜索策略
最佳优先搜索策略按照一定的网页分析算法,预测候选
URL
与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个
URL
进行抓取。它只访问经过网页分析算法预测为
“
有用
”
的网页。存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最优搜索算法。因此需要将最佳优先结合具体的应用进行改进,以跳出局部最优点。将在第
4
节中结合网页分析算法作具体的讨论。研究表明,这样的闭环调整可以将无关网页数量降低
30%~90%
。
[编辑本段]
4
网页分析算法
网页分析算法可以归纳为基于网络拓扑、基于网页内容和基于用户访问行为三种类型。
4.1
基于网络拓扑的分析算法
基于网页之间的链接,通过已知的网页或数据,来对与其有直接或间接链接关系的对象(可以是网页或网站等)作出评价的算法。又分为网页粒度、网站粒度和网页块粒度这三种。
4.1.1
网页
(Webpage)
粒度的分析算法
PageRank
和
HITS
算法是最常见的链接分析算法,两者都是通过对网页间链接度的递归和规范化计算,得到每个网页的重要度评价。
PageRank
算法虽然考虑了用户访问行为的随机性和
Sink
网页的存在,但忽略了绝大多数用户访问时带有目的性,即网页和链接与查询主题的相关性。针对这个问题,
HITS
算法提出了两个关键的概念:权威型网页(
authority
)和中心型网页(
hub
)。
基于链接的抓取的问题是相关页面主题团之间的隧道现象,即很多在抓取路径上偏离主题的网页也指向目标网页,局部评价策略中断了在当前路径上的抓取行为。文献
[21]
提出了一种基于反向链接(
BackLink
)的分层式上下文模型(
Context Model
),用于描述指向目标网页一定物理跳数半径内的网页拓扑图的中心
Layer0
为目标网页,将网页依据指向目标网页的物理跳数进行层次划分,从外层网页指向内层网页的链接称为反向链接。
4.1.2
网站粒度的分析算法
网站粒度的资源发现和管理策略也比网页粒度的更简单有效。网站粒度的爬虫抓取的关键之处在于站点的划分和站点等级
(SiteRank)
的计算。
SiteRank
的计算方法与
PageRank
类似,但是需要对网站之间的链接作一定程度抽象,并在一定的模型下计算链接的权重。
网站划分情况分为按域名划分和按
IP
地址划分两种。文献
[18]
讨论了在分布式情况下,通过对同一个域名下不同主机、服务器的
IP
地址进行站点划分,构造站点图,利用类似
PageRank
的方法评价
SiteRank
。同时,根据不同文件在各个站点上的分布情况,构造文档图,结合
SiteRank
分布式计算得到
DocRank
。文献
[18]
证明,利用分布式的
SiteRank
计算,不仅大大降低了单机站点的算法代价,而且克服了单独站点对整个网络覆盖率有限的缺点。附带的一个优点是,常见
PageRank
造假难以对
SiteRank
进行欺骗。
4.1.3
网页块粒度的分析算法
在一个页面中,往往含有多个指向其他页面的链接,这些链接中只有一部分是指向主题相关网页的,或根据网页的链接锚文本表明其具有较高重要性。但是,在
PageRank
和
HITS
算法中,没有对这些链接作区分,因此常常给网页分析带来广告等噪声链接的干扰。在网页块级别
(Blocklevel)
进行链接分析的算法的基本思想是通过
VIPS
网页分割算法将网页分为不同的网页块
(page block)
,然后对这些网页块建立
pagetoblock
和
blocktopage
的链接矩阵,
分别记为
Z
和
X
。于是,在
pagetopage
图上的网页块级别的
PageRank
为
Wp=X×Z
;
在
blocktoblock
图上的
BlockRank
为
Wb=Z×X
。
已经有人实现了块级别的
PageRank
和
HITS
算法,并通过实验证明,效率和准确率都比传统的对应算法要好。
4.2
基于网页内容的网页分析算法
基于网页内容的分析算法指的是利用网页内容(文本、数据等资源)特征进行的网页评价。网页的内容从原来的以超文本为主,发展到后来动态页面(或称为
Hidden Web
)数据为主,后者的数据量约为直接可见页面数据(
PIW
,
Publicly Indexable Web
)的
400~500
倍。另一方面,多媒体数据、
Web Service
等各种网络资源形式也日益丰富。因此,基于网页内容的分析算法也从原来的较为单纯的文本检索方法,发展为涵盖网页数据抽取、机器学习、数据挖掘、语义理解等多种方法的综合应用。本节根据网页数据形式的不同,将基于网页内容的分析算法,归纳以下三类:第一种针对以文本和超链接为主的无结构或结构很简单的网页;第二种针对从结构化的数据源(如
RDBMS
)动态生成的页面,其数据不能直接批量访问;第三种针对的数据界于第一和第二类数据之间,具有较好的结构,显示遵循一定模式或风格,且可以直接访问。
4.2.1
基于文本的网页分析算法
1)
纯文本分类与聚类算法
很大程度上借用了文本检索的技术。文本分析算法可以快速有效的对网页进行分类和聚类,但是由于忽略了网页间和网页内部的结构信息,很少单独使用。
2)
超文本分类和聚类算法
[编辑本段]
5
补充
网络爬虫(又被称为网页蜘蛛,网络机器人,在
FOAF
社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取**网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。
这些处理被称为网络抓取或者蜘蛛爬行。很多站点,尤其是搜索引擎,都使用爬虫提供最新的数据,它主要用于提供它访问过页面的一个副本,然后,搜索引擎就可以对得到的页面进行索引,以提供快速的访问。蜘蛛也可以在
web
上用来自动执行一些任务,例如检查链接,确认
html
代码;也可以用来抓取网页上某种特定类型信息,例如抓取电子邮件地址(通常用于垃圾邮件)。
一个
网络蜘蛛
就是一种机器人,或者软件代理。大体上,它从一组要访问的
URL
链接开始,可以称这些
URL
为种子。爬虫访问这些链接,它辨认出这些页面的所有超链接,然后添加到这个
URL
列表,可以称作检索前沿。这些
URL
按照一定的策略反复访问。
主要内容
• 1
爬行策略
o 1.1
选择策略
§ 1.1.1
限定访问链接
§ 1.1.2
路径检索
§ 1.1.3
聚焦检索
§ 1.1.4
抓取深层的网页
§ 1.1.5 Web 3.0
检索
o 1.2
重新访问策略
o 1.3
平衡礼貌策略
o 1.4
并行化策略
• 2
网络爬虫体系结构
o 2.1 URL
规范化
• 3
爬虫身份识别
• 4
网络爬虫的例子
o 4.1
开源的网络爬虫
1.
爬行策略
下述的三种网络特征,造成了设计网页爬虫抓取策略变得很难:
它巨大的数据量;
Ø
它快速的更新频率;
Ø
动态页面的产生
Ø
它们三个特征一起产生了很多种类的爬虫抓取链接。
巨大的数据量暗示了爬虫,在给定的时间内,只可以抓取所下载网络的一部分,所以,它需要对它的抓取页面设置优先级;快速的更新频率说明在爬虫抓取下载某网站一个网页的时候,很有可能在这个站点又有很的网页被添加进来,或者这个页面被更新或者删除了。
最近新增的很多页面都是通过服务器端脚本语言产生的,无穷的参数组合也增加了爬虫抓取的难度,只有一小部分这种组合会返回一些独特的内容。例如,一个很小照片存储库仅仅通过
get
方式可能提供就给用户三种操作方式。如果这里存着四种分类方式,三种缩略图方式,两种文件格式,和一个禁止用户提供内容的选项,那么,同样的内容就可以通过
48
种方式访问。这种数学组合给网络爬虫创造的难处就是,为了获取不同的内容,他们必须筛选无穷仅有微小变化的组合。
正如爱德华等人所说的:
“
用于检索的带宽不是无限的,也不是免费的;所以,如果引入衡量爬虫抓取质量或者新鲜度的有效指标的话,不但伸缩性,连有效性都将变得十分必要
”
(爱德华等人,
2001
年)。一个爬虫就必须小心的选择下一步要访问什么页面。网页爬虫的行为通常是四种策略组合的结果。
♦
选择策略,决定所要下载的页面;
♦
重新访问策略,决定什么时候检查页面的更新变化;
♦
平衡礼貌策略,指出怎样避免站点超载;
♦
并行策略,指出怎么协同达到分布式抓取的效果;
1.1
选择策略:
就现在网络资源的大小而言,即使很大的搜索引擎也只能获取网络上可得到资源的一小部分。由劳伦斯河盖尔斯共同做的一项研究指出,没有一个搜索引擎抓取的内容达到网络的
16%(
劳伦斯河盖尔斯,
2001)
。网络爬虫通常仅仅下载网页内容的一部分,但是大家都还是强烈要求下载的部分包括最多的相关页面,而不仅仅是一个随机的简单的站点。
这就要求一个公共标准来区分网页的重要程度,一个页面的重要程度与他自身的质量有关,与按照链接数、访问数得出的受欢迎程度有关,甚至与他本身的网址(后来出现的把搜索放在一个顶级域名或者一个固定页面上的垂直搜索)有关。设计一个好的搜索策略还有额外的困难,它必须在不完全信息下工作,因为整个页面的集合在抓取时是未知的。
Cho
等人(
Cho et al
,
1998
)做了第一份抓取策略的研究。他们的数据是斯坦福大学网站中的
18
万个页面,使用不同的策略分别模仿抓取。排序的方法使用了广度优先,后链计数,和部分
pagerank
算法。计算显示,如果你想要优先下载
pagerank
高的页面,那么,部分
PageRank
策略是比较好的,其次是广度优先和后链计数。并且,这样的结果仅仅是针对一个站点的。
Najork
和
Wiener (Najork and Wiener, 2001)
采用实际的爬虫,对
3.28
亿个网页,采用广度优先研究。他们发现广度优先会较早的抓到
PageRank
高的页面(但是他们没有采用其他策略进行研究)。作者给出的解释是:
“
最重要的页面会有很多的主机连接到他们,并且那些链接会较早的发现,而不用考虑从哪一个主机开始。
”
Abiteboul (Abiteboul
等人
, 2003)
,设计了一种基于
OPIC
(在线页面重要指数)的抓取战略。在
OPIC
中,每一个页面都有一个相等的初始权值,并把这些权值平均分给它所指向的页面。这种算法与
Pagerank
相似,但是他的速度很快,并且可以一次完成。
OPIC
的程序首先抓取获取权值最大的页面,实验在
10
万个幂指分布的模拟页面中进行。并且,实验没有和其它策略进行比较,也没有在真正的
WEB
页面测试。
Boldi
等人
(Boldi et al., 2004)
的模拟检索实验进行在
从
.it
网络上取下的
4000
万个页面和从
webbase
得到的
1
亿个页面上,测试广度优先和深度优先,随机序列和有序序列。比较的基础是真实页面
pageRank
值和计算出来的
pageRank
值的接近程度。令人惊奇的是,一些计算
pageRank
很快的页面(特别明显的是广度优先策略和有序序列)仅仅可以达到很小的接近程度。
Baeza-Yates
等人
(Baeza-Yates et al., 2005)
在从
.gr
域名和
.cl
域名子网站上获取的
300
万个页面上模拟实验,比较若干个抓取策略。结果显示
OPIC
策略和站点队列长度,都比广度优先要好;并且如果可行的话,使用之前的爬行抓取结果来指导这次抓取,总是十分有效的。
Daneshpajouh
等人
(Daneshpajouh et al., 2008)
设计了一个用于寻找好种子的社区。它们从来自不同社区的高
PageRank
页面开始检索的方法,迭代次数明显小于使用随机种子的检索。使用这种方式,可以从以前抓取页面之中找到好的种子,使用这些种子是十分有效的。
1.1.1
限定访问链接
一个爬虫可能仅仅想找到
html
页面的种子而避免其他的文件类型。为了仅仅得到
html
的资源,一个爬虫可以首先做一个
http head
的请求,以在使用
request
方法获取所有的资源之前,决定这个网络文件的类型。为了避免要发送过多的
head
请求,爬虫可以交替的检查
url
并且仅仅对以
html
,
htm
和反斜杠结尾的文件发送资源请求。这种策略会导致很多的
html
资源在无意中错过,一种相似的策略是将网络资源的扩展名同已知是
html
文件类型的一组扩展名(如
.html,.htm,.asp,.php,.aspx,
反斜杠)进行比较。
一些爬虫也会限制对任何含有
“
?
”
的资源(这些是动态生成的)进行获取请求,以避免蜘蛛爬行在某一个站点中陷入下载无穷无尽的
URL
的困境。
1.1.2
路径检索
一些爬虫会尽可能多的尝试下载一个特定站点的资源。
Cothey(Cothey,2004)
引入了一种路径检索的爬虫,它会尝试抓取需要检索资源的所有
URL
。例如,给定一个种子地址:
http://llama.org/hamster/monkey/page.html
,它将会尝试检索
/hamster/menkey/,/hamster/
和
/
。
Cothey
发现路径检索对发现独立资源,或者一些通常爬虫检索不到的的连接是非常有效的。
一些路径检索的爬虫也被称为收割机软件,因为他们通常用于收割或者收集所有的内容,可能是从特定的页面或者主机收集相册的照片。
1.1.3
聚焦抓取
爬虫所抓取页面的重要程度也可以表述成它与给定查询之间相似程度的函数。网络爬虫尝试下载相似页面,可以称为聚焦检索或者主题检索。关于主题检索和聚焦检索的概念,最早是由
Menczer
(
Menczer 1997; Menczer and Belew, 1998
)和
Chakrabarti
等人首先提出来的
(Chakrabarti et al., 1999)
。
聚焦检索的主要问题是网页爬虫的使用环境,我们希望在实际下载页面之前,就可以知道给定页面和查询之间的相似度。一个可能的方法就是在链接之中设置锚点,这就是在早期时候,
Pinkerton
(
Pinkerton
,
1994
)曾经在一个爬虫中采用的策略。
Diligenti
等人(
Diligenti
等人,
2000
)建议使用已经抓取页面的内容去推测查询和未访问页的相似度。一个聚焦查询的表现的好坏主要依赖于查询主题内容的丰富程度,通常还会依赖页面查询引擎提供的查询起点。
1.1.4
抓取深层的网页
很多的页面隐藏的很深或隐藏在在看不到的网络之中。这些页面通常只有在向数据库提交查询的时候才可以访问到,如果没有链接指向他们的话,一般的爬虫是不能访问到这些页面的。谷歌站点地图协议和
mod oai
(
Nelson
等人,
2005
)尝试允许发现这些深层次的资源。
深层页面抓取器增加了抓取网页的链接数。一些爬虫仅仅抓取形如
<a href=”url”
链接。某些情况下,例如
Googlebot
,
WEB
抓取的是所有超文本所包含的内容,标签和文本。
1.1.5
WEB3.0
检索
Web3.0
为下一代搜索技术定义了更先进的技术和新的准则,可以概括为语义网络和网站模板解析的概念。第三代检索技术将建立在人机巧妙的联系的基础上。
1.2
重新访问策略
网络具有动态性很强的特性。抓取网络上的一小部分内容可能会花费真的很长的时间,通常用周或者月来衡量。当爬虫完成它的抓取的任务以后,很多操作是可能会发生的,这些操作包括新建,更新和删除。
从搜索引擎的角度来看,不检测这些事件是有成本的,成本就是我们仅仅拥有一份过时的资源。最常使用的成本函数,是新鲜度和过时性(
2000
年,
Cho
和
Garcia-Molina
)
新鲜度:这是一个衡量抓取内容是不是准确的二元值。在时间
t
内,仓库中页面
p
的新鲜度是这样定义的:
新鲜度
过时性
:
这是一个衡量本地已抓取的内容过时程度的指标。在时间
t
时,仓库中页面
p
的时效性的定义如下:
过时性
在页面抓取中,新鲜度和过时性的发展
Coffman
等人(
Edward G. Coffman
,
1998
)是从事爬虫对象定义的,他们提出了一个相当于新鲜度的概念,但是使用了不同的措词:他们建议爬虫必须最小化过时页面部分。他们指出网络爬行的问题就相当于多个队列,一个投票系统;这里,爬虫是服务器,不同的站点是队列。页面修改是到达的顾客,页面切换的时间是页面进入一个单一站点的间隔。在这个模型下,每一个顾客在投票系统的平均时间,相当于爬虫的平均过时性。
爬虫的目标是尽可能高的提高页面的新鲜度,同时降低页面的过时性。这一目标并不是完全一样的,第一种情况,爬虫关心的是有多少页面时过时的;在第二种情况,爬虫关心的页面过时了多少。
两种最简单的重新访问策略是由
Cho
和
Garcia-Molina
研究的(
Cho
和
Garcia-Molina
,
2003
):
统一策略:使用相同的频率,重新访问收藏中的所有的链接,而不考虑他们更新频率。
正比策略:对变化越多的网页,重新访问的频率也越高。网页访问的频率和网页变化的频率直接相关。
(两种情况下,爬虫的重新抓取都可以采用随机方式,或者固定的顺序)
Cho
和
Garcia-Molina
证明了一个出人意料的结果。以平均新鲜度方式衡量,统一策略在模拟页面和真实的网络抓取中都比正比策略出色。对于这种结果的解释是:当一个页面变化太快的时候,爬虫将会将会在不断的尝试重新抓取而浪费很多时间,但是却还是不能保证页面的新鲜度。
为了提高页面的新鲜度,我们应该宣判变化太快的页面死罪(
Cho
和
Garcia-Molina, 2003a
)。最佳的重新访问策略既不是统一策略,也不是正比策略;保持平均页面新鲜度高的最佳方法策略包括忽略那些变化太快的页面,而保持页面平均过时性低的方法则是对每一页按照页面变化率单调变化的策略访问。两种情况下,最佳的策略较正比策略,都更接近统一策略。正如
Coffman
等人(
Edward G.Coffman
,
1998
)所注意到的:
“
为了最小化页面过时的时间,对任一个页面的访问都应该尽可能的均匀间隔地访问。
”
对于重新访问的详尽的策略在大体上是不可以达到的,但是他们可以从数学上得到,因为他们依赖于页面的变化。(
Cho
和
Garcia-Molina,2003a
)指出指数变化是描述页面变化的好方法,同时(
Ipeirotis
等人,
2005
)指出了怎么使用统计工具去发现适合这些变化的参数。注意在这里的重新访问策略认为每一个页面都是相同的(网络上所有的页面价值都是一样的)这不是现实的情况,所以,为了获取更好的抓取策略,更多有关网页质量的信息应该考虑进去。
1.3
平衡礼貌策略
爬虫相比于人,可以有更快的检索速度和更深的层次,所以,他们可能使一个站点瘫痪。不需要说一个单独的爬虫一秒钟要执行多条请求,下载大的文件。一个服务器也会很难响应多线程爬虫的请求。
就像
Koster
(
Koster
,
1995
)所注意的那样,爬虫的使用对很多工作都是很有用的,但是对一般的社区,也需要付出代价。使用爬虫的代价包括:
网络资源:在很长一段时间,爬虫使用相当的带宽高度并行地工作。
Ø
服务器超载:尤其是对给定服务器的访问过高时。
Ø
质量糟糕的爬虫,可能是服务器或者路由器瘫痪,或者会尝试下载自己无法处理的页面。
Ø
个人爬虫,如果过多的人使用,可能是网络或者服务器阻塞。
Ø
对这些问题的一个部分解决方法是漫游器排除协议(
Robots exclusion protocol
),也被称为
robots.txt
议定书(
Koster
,
1996
),这份协议对于管理员指明网络服务器的那一部分不能到达是一个标准。这个标准没有包括重新访问一台服务器的间隔的建议,虽然访问间隔是避免服务器超载的最有效的办法。最近的商业搜索软件,如
Ask Jeeves
,
MSN
和
Yahoo
可以在
robots.txt
中使用一个额外的
“Crawl-delay”
参数来指明请求之间的延迟。
对连接间隔时间的第一个建议由
Koster 1993
年给出,时间是
60
秒。按照这个速度,如果一个站点有超过
10
万的页面,即使我们拥有零延迟和无穷带宽的完美连接,它也会需要两个月的时间来下载整个站点,并且,这个服务器中的资源,只有一小部分可以使用。这似乎是不可以接受的。
Cho
(
Cho
和
Garcia-Molina, 2003
)使用
10
秒作为访问的间隔时间,
WIRE
爬虫
(Baeza-Yates and Castillo, 2002)
使用
15
秒作为默认间隔。
MercatorWeb(Heydon
和
Najork, 1999)
爬虫使用了一种自适应的平衡策略:如果从某一服务器下载一个文档需要
t
秒钟,爬虫就等待
10t
秒的时间,然后开始下一个页面。
Dill
等人
(Dill et al., 2002)
使用
1
秒。
对于那些使用爬虫用于研究目的的,一个更详细的成本
-
效益分析是必要的,当决定去哪一个站点抓取,使用多快的速度抓取的时候,伦理的因素也需要考虑进来。
访问记录显示已知爬虫的访问间隔从
20
秒钟到
3-4
分钟不等。需要注意的是即使很礼貌,采取了所有的安全措施来避免服务器超载,还是会引来一些网络服务器管理员的抱怨的。
Brin
和
Page
注意到:运行一个针对超过
50
万服务器的爬虫,会产生很多的邮件和电话。这是因为有无数的人在上网,而这些人不知道爬虫是什么,因为这是他们第一次见到。(
Brin
和
Page
,
1998
)
1.4
并行策略
一个并行爬虫是并行运行多个进程的爬虫。它的目标是最大化下载的速度,同时尽量减少并行的开销和下载重复的页面。为了避免下载一个页面两次,爬虫系统需要策略来处理爬虫运行时新发现的
URL
,因为同一个
URL
地址,可能被不同的爬虫进程抓到。
参考文献
[1] Edwards, J., McCurley, K. S., and Tomlin, J. A. (2001). "An adaptive model for optimizing performance of an incremental web crawler". In Proceedings of the Tenth Conference on World Wide Web (Hong Kong: Elsevier Science): 106–113. doi:10.1145/371920.371960.
[2] Lawrence, Steve; C. Lee Giles (1999). "Accessibility of information on the web". Nature 400 (6740): 107. doi:10.1038/21987.
[3] Junghoo Cho. Hector Garcia-Molina. Lawrence Page (1998). Efficient Crawling Through URL Ordering. Computer Networks 30(1-7): 161-172
[4] Najork, M. and Wiener, J. L. (2001). Breadth-first crawling yields high-quality pages. In Proceedings of the 10th international Conference on World Wide Web (Hong Kong, May 01 - 05, 2001). WWW '01. ACM Press, 114-118.
[5] Serge Abiteboul, Mihai Preda, Gregory Cobena (2003). Adaptive on-line page importance computation.International World Wide Web Conference archive. Proceedings of the 12th international conference on World Wide Web. ACM Press, 280-290.
[6] Boldi, Paolo; Massimo Santini, Sebastiano Vigna (2004). "Do Your Worst to Make the Best: Paradoxical Effects in PageRank Incremental Computations". Algorithms and Models for the Web-Graph. pp. 168–180.
[7] Ricardo Baeza-Yates, Carlos Castillo, Mauricio Marin, Andrea Rodriguez (2005). Crawling a country: better strategies than breadth-first for web page ordering. International World Wide Web Conference archive Special interest tracks and posters of the 14th international conference on World Wide Web table of contents ( Chiba, Japan). ACM Press, 864 - 872.
[8] Sh. Daneshpajouh, Mojtaba Mohammadi Nasiri, M. Ghodsi (2008). A Fast Community Based Algorithm for Generating Crawler Seeds Set, In Proceeding of 4th International Conference on Web Information Systems and Technologies (WEBIST-2008), Funchal, Portugal, May 2008.
[9] Viv Cothey. Web-crawling reliability (2004). Journal of the American Society for Information Science and Technology, 55(14), pp 1228-1238.
[10] Menczer, F. (1997). ARACHNID: Adaptive Retrieval Agents Choosing Heuristic Neighborhoods for Information Discovery. In D. Fisher, ed., Machine Learning: Proceedings of the 14th International Conference (ICML97). Morgan Kaufmann
[11] Menczer, F. and Belew, R.K. (1998). Adaptive Information Agents in Distributed Textual Environments. In K. Sycara and M. Wooldridge (eds.) Proc. 2nd Intl. Conf. on Autonomous Agents (Agents '98). ACM Press
[12] Chakrabarti, S., van den Berg, M., and Dom, B. (1999). Focused crawling: a new approach to topic-specific web resource discovery. Computer Networks, 31(11–16):1623–1640.
[13] Pinkerton, B. (1994). Finding what people want: Experiences with the WebCrawler. In Proceedings of the First World Wide Web Conference, Geneva, Switzerland
[14] M. Diligenti, F.M. Coetzee, S. Lawrence, C.L. Giles, M. Gori (2000).
Focused Crawling Using Context Graphs. 26th International Conference on Very Large Databases, VLDB 2000.
[15] [15] Nelson, Michael L; Herbert Van de Sompel, Xiaoming Liu, Terry L Harrison, Nathan McFarland (2005). "mod_oai: An Apache Module for Metadata Harvesting". Cs/0503069.
[16] Junghoo Cho. Hector Garcia-Molina (2000). Synchronizing a database to improve freshness. ACM SIGMOD Record archive. Volume 29 , Issue 2 (June 2000) table of contents. Pages: 117 - 128.
[17] Jr, E. G. Coffman; Zhen Liu, Richard R. Weber (1998). "Optimal robot scheduling for Web search engines". Journal of Scheduling 1 (1): 15–29.
[18] Junghoo Cho. Hector Garcia-Molina (2003). Effective page refresh policies for Web crawlers. ACM Transactions on Database Systems (TODS). Pages: 390 - 426.
[19] Cho, Junghoo; Hector Garcia-Molina (2003). "Estimating frequency of change". ACM Trans. Interet Technol. 3 (3): 256–290.
[20] Ipeirotis, P., Ntoulas, A., Cho, J., Gravano, L. (2005) Modeling and managing content changes in text databases. In Proceedings of the 21st IEEE International Conference on Data Engineering, pages 606-617, April 2005, Tokyo.
[21] M. Koster (1995). Robots in the web:threat or treat? OII Spectrum, 1995, vol. 2, no9, pp. 8-18.
[22] M. Koster (1996). The Web Robots Page. Available at http://info.webcrawler.com/mak/projects/robots/robots.html.
[23] Koster, M. (1993). Guidelines for robots writers.
[24] Baeza-Yates, R. and Castillo, C. (2002). Balancing volume, quality and freshness in Web crawling. In Soft Computing Systems – Design, Management and Applications, pages 565–572, Santiago, Chile. IOS Press Amsterdam.
[25] Heydon, Allan; Najork, Marc (1999) . Mercator: A Scalable, Extensible Web Crawler. http://www.cindoc.csic.es/cybermetrics/pdf/68.pdf.
[26] Dill, S., Kumar, R., Mccurley, K. S., Rajagopalan, S., Sivakumar, D., and Tomkins, A. (2002). Self-similarity in the web. ACM Trans. Inter. Tech., 2(3):205–223.
2.
网络爬虫体系结构
网页爬虫的高层体系结构
一个爬虫不能像上面所说的,仅仅只有一个好的抓取策略,还需要有一个高度优化的结构。
Shkapenyuk
和
Suel
(
Shkapenyuk
和
Suel
,
2002
)指出:设计一个短时间内,一秒下载几个页面的颇慢的爬虫是一件很容易的事情,而要设计一个使用几周可以下载百万级页面的高性能的爬虫,将会在系统设计,
I/O
和网络效率,健壮性和易用性方面遇到众多挑战。
网路爬虫是搜索引擎的核心,他们算法和结构上的细节被当作商业机密。当爬虫的设计发布时,总会有一些为了阻止别人复制工作而缺失的细节。人们也开始关注主要用于阻止主要搜索引擎发布他们的排序算法的
“
搜索引擎垃圾邮件
”
。
2.1 URL
一般化
爬虫通常会执行几种类型的
URL
规范化来避免重复抓取某些资源。
URL
一般化也被称为
URL
标准化,指的是修正
URL
并且使其前后一致的过程。这里有几种一般化方法,包括转化
URL
为小写的,去除逗号(如
‘.’ ‘..’
等),对非空的路径,在末尾加反斜杠。
3.
爬虫身份识别
网络爬虫通过使用
http
请求的用户代理字段来向网络服务器表明他们的身份。网络管理员则通过检查网络服务器的日志,使用用户代理字段来辨认哪一个爬虫曾经访问过以及它访问的频率。用户代理字段可能会包含一个可以让管理员获取爬虫更多信息的
URL
。邮件抓取器和其他怀有恶意的网络爬虫通常不会**何的用户代理字段内容,或者他们也会将他们的身份伪装成浏览器或者其他的知名爬虫。
对于网路爬虫,留下用户标志信息是十分重要的;这样,网络管理员在需要的时候就可以联系爬虫的主人。有时,爬虫可能会陷入爬虫陷阱或者是一个服务器超负荷,这时,爬虫主人需要使爬虫停止。对那些有兴趣了解特定爬虫访问时间网络管理员来讲,用户标识信息是十分重要的。
4.
用户爬虫的例子
以下是一系列已经发布的一般用途的网络爬虫(除了主题检索的爬虫)的体系结构,包括了对不同组件命名和突出特点的简短的描述。
RBSE
Ø
(
Eichmann
,
1994
)是第一个发布的爬虫。它有两个基础程序。第一个是
“spider”
,抓取队列中的内容到一个关系数据库中,第二个程序是
“mite”
,是一个修改后的
www
的
ASCII
浏览器,负责从网络上下载页面。
WebCrawler
(
Pinkerton
,
1994
)是第一个公开可用的
Ø
用来建立全文索引的一个子程序,他使用库
www
来下载页面;另外一个程序使用广度优先来解析获取
URL
并对其排序;它还包括一个根据选定文本和查询相似程度爬行的实时爬虫。
World Wide Web Worm (McBryan,
Ø
1994)
是一个用来为文件建立包括标题和
URL
简单索引的爬虫。索引可以通过
grep
式的
Unix
命令来搜索。
Google Crawler (Brin and Page,
Ø
1998)
用了一些细节来描述,但是这些细节仅仅是关于使用
C++
和
Python
编写的、一个早期版本的体系结构。因为文本解析就是
文检索和
URL
抽取的过程,所以爬虫集成了索引处理。这里拥有一个
URL
服务器,用来给几个爬虫程序发送要抓取的
URL
列表。在文本解析的时候,新发现的
URL
传送给
URL
服务器并检测这个
URL
是不是已经存在,如果不存在的话,该
URL
就加入到
URL
服务器中。
CobWeb (da Silva et al.,
Ø
1999)
使用了一个中央
“
调度者
”
和一系列的
“
分布式的搜集者
”
。搜集者解析下载的页面并把找到的
URL
发送给调度者,然后调度者反过来分配给搜集者。调度者使用
深度优先策略
,并且使用平衡礼貌策略来避免服务器超载。爬虫是使用
Perl
语言编写的。
Mercator (Heydon and Najork, 1999; Najork and
Ø
Heydon, 2001)
是一个分布式的,模块化的使用
java
编写的网络爬虫。它的模块化源自于使用可互换的的
“
协议模块
”
和
“
处理模块
”
。协议模块负责怎样获取网页(例如使用
HTTP
),处理模块负责怎样处理页面。标准处理模块仅仅包括了解析页面和抽取
URL
,其他处理模块可以用来检索文本页面,或者搜集网络数据。
WebFountain (Edwards et al.,
Ø
2001)
是一个与
Mercator
类似的分布式的模块化的爬虫,但是使用
C++
编写的。它的特点是一个管理员机器控制一系列的蚂蚁机器。经过多次下载页面后,页面的变化率可以推测出来,这时,一个非线性的方法必须用于求解方程以获得一个最大的新鲜度的访问策略。作者推荐在早期检索阶段使用这个爬虫,然后用统一策略检索,就是所有的页面都使用相同的频率访问。
PolyBot [Shkapenyuk and Suel,
Ø
2002]
是一个使用
C++
和
Python
编写的分布式网络爬虫。它由一个爬虫管理者,一个或多个下载者,一个或多个
DNS
解析者组成。抽取到的
URL
被添加到硬盘的一个队列里面,然后使用批处理的模式处理这些
URL
。平衡礼貌方面考虑到了第二、三级网域(例如
www.example.com
和
www2.example.com
都是三级网域),因为第三级网域通常也会保存在同一个网络服务器上。
WebRACE (Zeinalipour-Yazti and Dikaiakos,
Ø
2002)
是一个使用
java
实现的,拥有检索模块和缓存模块的爬虫,它是一个很通用的称作
eRACE
的系统的一部分。系统从用户得到下载页面的请求,爬虫的行为有点像一个聪明的代理服务器。系统还监视订阅网页的请求,当网页发生改变的时候,它必须使爬虫下载更新这个页面并且通知订阅者。
WebRACE
最大的特色是,当大多数的爬虫都从一组
URL
开始的时候,
WebRACE
可以连续地的接收抓取开始的
URL
地址。
Ubicrawer (Boldi et al.,
Ø
2004)
是一个使用
java
编写的分布式爬虫。它没有中央程序。它有一组完全相同的代理组成,分配功能通过主机前后一致的散列计算进行。这里没有重复的页面,除非爬虫崩溃了(然后,另外一个代理就会接替崩溃的代理重新开始抓取)。爬虫设计为高伸缩性和允许失败的。
FAST Crawler (Risvik and Michelsen, 2002)
Ø
是一个分布式的爬虫,在
Fast Search&Transfer
中使用,关于其体系结构的一个大致的描述可以在
[citation needed]
找到。
Labrador,
一个工作在开源项目
Terrier Search Engine
上的非开源的爬虫。
Ø
Ø
TeezirCrawler
是一个非开源的可伸缩的网页抓取器,在
Teezir
上使用。该程序被设计为一个完整的可以处理各种类型网页的爬虫,包括各种
JavaScript
和
HTML
文档。爬虫既支持主题检索也支持非主题检索。
Spinn3r,
一个通过博客构建
Tailrank.com
反馈信息的爬虫。
Ø
Spinn3r
是基于
java
的,它的大部分的体系结构都是开源的。
HotCrawler,
一个使用
c
语言和
php
编写的爬虫。
Ø
ViREL Microformats Crawler
,搜索公众信息作为嵌入到网页的一小部分。
Ø
除了上面列出的几个特定的爬虫结构以外,还有
Cho (Cho and Garcia-Molina, 2002)
和
Chakrabarti (Chakrabarti, 2003)
发布的一般的爬虫体系结构。
4.1
开源爬虫
DataparkSearch
是一个在
GNU GPL
许可下发布的爬虫搜索引擎。
l
GNU
l
Wget
是一个在
GPL
许可下,使用
C
语言编写的命令行式的爬虫。它主要用于网络服务器和
FTP
服务器的镜像。
l
Heritrix
是一个互联网档案馆级的爬虫,设计的目标为对大型网络的大部分内容的定期存档快照,是使用
java
编写的。
Ht://Dig
在它和索引引擎中包括了一个网页爬虫。
l
HTTrack
用网络爬虫创建网络站点镜像,以便离线观看。它使用
C
语言编写,在
GPL
许可下发行。
l
ICDL
l
Crawler
是一个用
C++
编写,跨平台的网络爬虫。它仅仅使用空闲的
CPU
资源,在
ICDL
标准上抓取整个站点。
JSpider
是一个在
GPL
许可下发行的,高度可配置的,可定制的网络爬虫引擎。
l
LLarbin
由
Sebastien Ailleret
开发;
l
Webtools4larbin
由
Andreas Beder
开发;
l
Methabot
是一个使用
C
语言编写的高速优化的,使用命令行方式运行的,在
2-clause
l
BSD
许可下发布的网页检索器。它的主要的特性是高可配置性,模块化;它检索的目标可以是本地文件系统,
HTTP
或者
FTP
。
l
Nutch
是一个使用
java
编写,在
Apache
许可下发行的爬虫。它可以用来连接
Lucene
的全文检索套件;
l
Pavuk
是一个在
GPL
许可下发行的,使用命令行的
WEB
站点镜像工具,可以选择使用
X11
的图形界面。与
wget
和
httprack
相比,他有一系列先进的特性,如以正则表达式为基础的文件过滤规则和文件创建规则。
WebVac
是斯坦福
WebBase
项目使用的一个爬虫。
l
WebSPHINX(Miller and Bharat,
l
1998)
是一个由
java
类库构成的,基于文本的搜索引擎。它使用多线程进行网页检索,
html
解析,拥有一个图形用户界面用来设置开始的种子
URL
和抽取下载的数据;
WIRE-
网络信息检索环境
(Baeza-Yates
和
Castillo,
l
2002)
是一个使用
C++
编写,在
GPL
许可下发行的爬虫,内置了几种页面下载安排的策略,还有一个生成报告和统计资料的模块,所以,它主要用于网络特征的描述;
l
LWP
:
RobotUA(Langheinrich,2004)
是一个在
Perl5
许可下发行的,可以优异的完成并行任务的
Perl
类库构成的机器人。
Web Crawler
是一个为
.net
准备的开放源代码的网络检索器(
C#
编写)。
l
Sherlock
l
Holmes
收集和检索本地和网络上的文本类数据(文本文件,网页),该项目由捷克门户网站中枢(
Czech web portal Centrum
)赞助并且主用商用于这里;它同时也使用在
Onet.pl
。
YaCy
是一个基于
P2P
网络的免费的分布式搜索引擎(在
GPL
许可下发行);
l
l
Ruya
是一个在广度优先方面表现优秀,基于等级抓取的开放源代码的网络爬虫。在英语和日语页面的抓取表现良好,它在
GPL
许可下发行,并且完全使用
Python
编写。按照
robots.txt
有一个延时的单网域延时爬虫。
Universal Information
l
Crawler
快速发展的网络爬虫,用于检索存储和分析数据;
Agent Kernel
,当一个爬虫抓取时,用来进行安排,并发和存储的
java
框架。
l
Arachnod.net
是一个使用
C#
编写,需要
SQL Server
l
2005
支持的,在
GPL
许可下发行的多功能的开源的机器人。它可以用来下载,检索,存储包括电子邮件地址,文件,超链接,图片和网页在内的各种数据。
Dine
是一个多线程的
java
的
http
客户端。它可以在
LGPL
许可下进行二次开发。
l