网络爬虫(又称为网页蜘蛛,网络机器人,在FOFA社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

产生背景
随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:
(1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通过搜索引擎所返回的结果包含大量用户不关心的网页。
(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
网络爬虫

(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
聚焦爬虫工作原理以及关键技术概述

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。
另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:
(1) 对抓取目标的描述或定义;
(2) 对网页或数据的分析与过滤;
(3) 对URL的搜索策略。
面临的问题
截止到 2007 年底,Internet 上网页数量超出 160 亿个,研究表明接近 30%的页面是重复的;动态页面的存在:客户端、服务器端脚本语言的应用使得指向相同 Web 信息的 URL 数量呈指数级增长。 上述特征使得网络爬虫面临一定的困难,主要体现在 Web 信息的巨大容量使得爬虫在给定时间内只能下载少量网页。 Lawrence 和 Giles 的研究表明没有哪个搜索引擎能够索引超出 16%的Internet 上 Web 页面,即使能够提取全部页面,也没有足够的空间来存储。
为提高爬行效率,爬虫需要在单位时间内尽可能多的获取高质量页面,是它面临的难题之一。 当前有五种表示页面质量高低的方式[1]:Similarity(页面与爬行主题之间的相似度)、Backlink(页面在 Web 图中的入度大小)、PageRank(指向它的所有页面平均权值之和)、Forwardlink(页面在 Web 图中的出度大小)、Location(页面的信息位置);Parallel(并行性问题)。

为了提高爬行速度,网络通常会采取并行爬行的工作方式,随之引入了新的问题:重复性(并行运行的爬虫或爬行线程同时运行时增加了重复页面)、质量问题(并行运行时,每个爬虫或爬行线程只能获取部分页面,导致页面质量下降)、通信带宽代价(并行运行时,各个爬虫或爬行线程之间不可避免要进行一些通信)。 并行运行时,网络爬虫通常采用三种方式:独立方式(各个爬虫独立爬行页面,互不通信)、动态分配方式(由一个中央协调器动态协调分配 URL 给各个爬虫)、静态分配方式(URL 事先划分给各个爬虫)。
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。例如,给定一个种子地址:它将会尝试检索/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)尝试允许发现这些深层次的资源。
深层页面抓取器增加了抓取网页的链接数。一些爬虫仅仅抓取形如超文本所包含的内容,标签和文本。
1.1.5 WEB3.0检索
Web3.0为下一代搜索技术定义了更先进的技术和新的准则,可以概括为语义网络和网站模板解析的概念。第三代检索技术将建立在人机巧妙的联系的基础上。
1.2重新访问策略
网络具有动态性很强的特性。抓取网络上的一小部分内容可能会花费真的很长的时间,通常用周或者月来衡量。当爬虫完成它的抓取的任务以后,很多操作是可能会发生的,这些操作包括新建,更新和删除。
从搜索引擎的角度来看,不检测这些事件是有成本的,成本就是我们仅仅拥有一份过时的资源。最常使用的成本函数,是新鲜度和过时性(2000年,Cho 和Garcia-Molina)