网络爬虫调研报告
基本原理
Spider 概述
Spider 即网络爬虫 , 其定义有广义和狭义之分。狭义上指遵循标准的 http 协议利用超链接和 Web 文档检索的方法遍历万维网信息空间的软件程序 ; 而广义的定义则是所有能遵循 http 协议检索 Web 文档的软件都称之为网络爬虫。
Spider 是一个功能很强的自动提取网页的程序 , 它为搜索引擎从万维网上下载网页 , 是搜索引擎的重要组成 . 它通过请求站点上的 HTML 文档访问某一站点。它遍历 Web 空间 , 不断从一个站点移动到另一个站点 , 自动建立索引 , 并加入到网页数据库中。网络爬虫进入某个超级文本时 , 它利用 HTML 语言的标记结构来搜索信息及获取指向其他超级文本的 URL 地址 , 可以完全不依赖用户干预实现网络上的自动爬行和搜索。
Spider 的队列
( 1 )等待队列 : 新发现的 URL 被加入到这个队列 , 等待被 Spider 程序处理 ;
( 2 )处理队列 : 要被处理的 URL 被传送到这个队列。为了避免同一个 URL 被多次处理 , 当一个 URL 被处理过后 , 它将被转移到完成队列或者错误队列 ( 如果发生错误 ) 。
( 3 )错误队列 : 如果在下载网页是发生错误 , 该 URL 将被加入 到错误队列。
( 4 )完成队列 : 如果在处理网页没有发生错误 , 该 URL 将被加入到完成队列。
网络爬虫搜索策略
在抓取网页的时候 , 目前网络爬虫一般有两种策略 : 无主题搜索与基于某特定主体的专业智能搜索。其中前者主要包括 : 广度优先和深度优先。广度优先是指网络爬虫会先抓取起始网页中链接的所有网页 , 然后再选择其中的一个链接网页 , 继续抓取在此网页中链接的所有网页。这是最常用的方式 , 因为这个方法可以让网络爬虫并行处理 , 提高其抓取速度。深度优先是指网络爬虫会从起始页开始 , 一个链接一个链接跟踪下去 , 处理完这条线路之后再转入下一个起始页 , 继续跟踪链接。这个方法有个优点是网络爬虫在设计的时候比较容易。大多数网页爬行器采用宽度优先搜索策略或者是对这种策略的某些改进。
在专业搜索引擎中 , 网络爬虫的任务是获取 Web 页面和决定链接的访问顺序 , 它通常从一个 “种子集 ” ( 如用户查询、种子链接或种子页面 ) 发 , 以迭代的方式访问页面和提取链接。搜索过程中 , 未访问的链接被暂存在一个称为 “搜索前沿 ” (Spider Frontier) 的队列中 , 网络爬虫根据搜索前沿中链接的 “重要程度 ”决定下一个要访问的链接。如何评价和预测链接的 “重要程度 ” ( 或称价值 ) 是决定网络爬虫搜索策略的关键。
众多的网络爬虫设计各不相同 , 但归根结底是采用不同的链接价值评价标准。
常用开源网络爬虫介绍及其比较
Nutch
开发语言: Java
http://lucene.apache.org/nutch/
简介:
Apache 的子项目之一,属于 Lucene 项目下的子项目。
Nutch 是一个基于 Lucene ,类似 Google 的完整网络搜索引擎解决方案,基于 Hadoop 的分布式处理模型保证了系统的性能,类似 Eclipse 的插件机制保证了系统的可客户化,而且很容易集成到自己的应用之中。
Larbin
开发语言: C++
http://larbin.sourceforge.net/index-eng.html
简介
larbin 是一种开源的网络爬虫 / 网络蜘蛛,由法国的年轻人 Sébastien Ailleret 独立开发。 larbin 目的是能够跟踪页面的 url 进行扩展的抓取,最后为搜索引擎提供广泛的数据来源。
Larbin 只是一个爬虫,也就是说 larbin 只抓取网页,至于如何 parse 的事情则由用户自己完成。另外,如何存储到数据库以及建立索引的事情 larbin 也不提供。
latbin 最初的设计也是依据设计简单但是高度可配置性的原则,因此我们可以看到,一个简单的 larbin 的爬虫可以每天获取500万的网页,非常高效。
Heritrix
开发语言: Java
简介
与 Nutch 比较
Heritrix 和 Nutch 。二者均为 Java 开源框架, Heritrix 是 SourceForge 上的开源产品, Nutch 为 Apache 的一个子项目,它们都称作网络爬虫 / 蜘蛛( Web Crawler ),它们实现的原理基本一致:深度遍历网站的资源,将这些资源抓取到本地,使用的方法都是分析网站每一个有效的 URI ,并提交 Http 请求,从而获得相应结果,生成本地文件及相应的日志信息等。
Heritrix 是个 "archival crawler" -- 用来获取完整的、精确的、站点内容的深度复制。包括获取图像以及其他非文本内容。抓取并存储相关的内容。对内容来者不拒,不对页面进行内容上的修改。重新爬行对相同的 URL 不针对先前的进行替换。爬虫通过 Web 用户界面启动、监控、调整,允许弹性的定义要获取的 URL 。
二者的差异:
Nutch 只获取并保存可索引的内容。 Heritrix 则是照单全收。力求保存页面原貌
Nutch 可以修剪内容,或者对内容格式进行转换。
Nutch 保存内容为数据库优化格式便于以后索引;刷新替换旧的内容。而 Heritrix 是添加 ( 追加 ) 新的内容。
Nutch 从命令行运行、控制。 Heritrix 有 Web 控制管理界面。
Nutch 的定制能力不够强,不过现在已经有了一定改进。 Heritrix 可控制的参数更多。
Heritrix 提供的功能没有 nutch 多,有点整站下载的味道。既没有索引又没有解析,甚至对于重复爬取 URL 都处理不是很好。
Heritrix 的功能强大 但是配置起来却有点麻烦。
三者的比较
一、从功能方面来说, Heritrix 与 Larbin 的功能类似。都是一个纯粹的网络爬虫,提供网站的镜像下载。而 Nutch 是一个网络搜索引擎框架,爬取网页只是其功能的一部分。
二、从分布式处理来说, Nutch 支持分布式处理,而另外两个好像尚且还没有支持。
三、从爬取的网页存储方式来说, Heritrix 和 Larbin 都是将爬取下来的内容保存为原始类型的内容。而 Nutch 是将内容保存到其特定格式的 segment 中去。
四,对于爬取下来的内容的处理来说, Heritrix 和 Larbin 都是将爬取下来的内容不经处理直接保存为原始内容。而 Nutch 对文本进行了包括链接分析、正文提取、建立索引( Lucene 索引)等处理。
五,从爬取的效率来说, Larbin 效率较高,因为其是使用 c++ 实现的并且功能单一。
表 3 种爬虫的比较
crawler | 开发语言 | 功能单一 | 支持分布式爬取 | 效率 | 镜像保存 |
Nutch | Java | × | √ | 低 | × |
Larbin | C++ | √ | × | 高 | √ |
Heritrix | Java | √ | × | 中 | √ |
其他网络爬虫介绍:
Heritrix
Heritrix 是一个开源,可扩展的 web 爬虫项目。 Heritrix 设计成严格按照 robots.txt 文件的排除指示和 META robots 标签。
http://crawler.archive.org/
WebSPHINX
WebSPHINX 是一个 Java 类包和 Web 爬虫的交互式开发环境。 Web 爬虫 ( 也叫作机器人或蜘蛛 ) 是可以自动浏览与处理 Web 页面的程序。 WebSPHINX 由两部分组成:爬虫工作平台和 WebSPHINX 类包。 http://www.cs.cmu.edu/~rcm/websphinx/
WebLech
WebLech 是一个功能强大的 Web 站点下载与镜像工具。它支持按功能需求来下载 web 站点并能够尽可能模仿标准 Web 浏览器的行为。 WebLech 有一个功能控制台并采用多线程操作。
http://weblech.sourceforge.net/
Arale
Arale 主要为个人使用而设计,而没有像其它爬虫一样是关注于页面索引。 Arale 能够下载整个 web 站点或来自 web 站点的某些资源。 Arale 还能够把动态页面映射成静态页面。
http://web.tiscali.it/_flat/arale.jsp.html