一、Nutch介绍
What is Apache Nutch?
Apache Nutch is a highly extensible and scalable open source web crawler software project. Stemming from Apache Lucene, the project has diversified and now comprises two codebases, namely:
Nutch 1.x: A well matured, production ready crawler. 1.x enables fine grained configuration, relying on Apache Hadoop data structures, which are great for batch processing.
Nutch 2.x: An emerging alternative taking direct inspiration from 1.x, but which differs in one key area; storage is abstracted away from any specific underlying data store by using Apache Gora for handling object to persistent mappings. This means we can implement an extremely flexibile model/stack for storing everything (fetch time, status, content, parsed text, outlinks, inlinks, etc.) into a number of NoSQL storage solutions.
Being pluggable and modular of course has it's benefits, Nutch provides extensible interfaces such as Parse, Index and ScoringFilter's for custom implementations e.g. Apache Tika for parsing. Additionally, pluggable indexing exists for Apache Solr, Elastic Search, etc.
Nutch can run on a single machine, but gains a lot of its strength from running in a Hadoop cluster
For more information about Apache Nutch, please see the Nutch wiki.
Nutch is a project of the Apache Software Foundation and is part of the larger Apache community of developers and users.
Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己
的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降. 并且这很有可能进一步演变成为一个公司垄断了几乎所有的web搜索为其谋取商业利益.这显然 不利于广大Internet用户.
Nutch为我们提供了这样一个不同的选择. 相对于那些商用的搜索引擎, Nutch作为开放源代码 搜索引擎将会更加透明, 从而更值得大家信赖. 现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为什么一个网页会排在一个特定的位置. 除此之外, 有的搜索引擎依照网站所付的 费用, 而不是根据它们本身的价值进行排序. 与它们不同, Nutch没有什么需要隐瞒, 也没有 动机去扭曲搜索的结果. Nutch将尽自己最大的努力为用户提供最好的搜索结果.
二、Nutch工作流程
在创建一个WebDB之后(步骤1), “产生/抓取/更新”循环(步骤3-6)根据一些种子URLs开始启动。当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤7-10)。在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。
其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?原因在于抓取的更新。比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。
Nutch和Lucene
Nutch是基于Lucene的。Lucene为Nutch提供了文本索引和搜索的API。
一个常见的问题是:我应该使用Lucene还是Nutch?
最简单的回答是:如果你不需要抓取数据的话,应该使用Lucene。
常见的应用场合是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据并用Lucene API 建立索引。
在你没有本地数据源,或者数据源非常分散的情况下,应该使用Nutch。
在分析了Crawler工作中设计的文件之后,接下来我们研究Crawler的抓取流程以及这些文件在抓取中扮演的角色。Crawler的工作原理:首先Crawler根据WebDB生成一个待抓取网页的URL集合叫做Fetchlist,接着下载线程Fetcher根据Fetchlist将网页抓取回来,如果下载线程有很多个,那么就生成很多个Fetchlist,也就是一个Fetcher对应一个Fetchlist。然后Crawler用抓取回来的网页更新WebDB,根据更新后的WebDB生成新的Fetchlist,里面是未抓取的或者新发现的URLs,然后下一轮抓取循环重新开始。这个循环过程可以叫做“产生/抓取/更新”循环。
指向同一个主机上Web资源的URLs通常被分配到同一个Fetchlist中,这可防止过多的Fetchers对一个主机同时进行抓取造成主机负担过重。另外Nutch遵守Robots Exclusion Protocol,网站可以通过自定义Robots.txt控制Crawler的抓取。
在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。这些子操作Nutch都提供了子命令行可以单独进行调用。下面就是这些子操作的功能描述以及命令行,命令行在括号中。
1. 创建一个新的WebDb (admin db -create).
2. 将抓取起始URLs写入WebDB中 (inject).
3. 根据WebDB生成fetchlist并写入相应的segment(generate).
4. 根据fetchlist中的URL抓取网页 (fetch).
5. 根据抓取网页更新WebDb (updatedb).
6. 循环进行3-5步直至预先设定的抓取深度。
7. 根据WebDB得到的网页评分和links更新segments (updatesegs).
8. 对所抓取的网页进行索引(index).
9. 在索引中丢弃有重复内容的网页和重复的URLs (dedup).
10. 将segments中的索引进行合并生成用于检索的最终index(merge).
相关推荐
10. **搜索接口**:Nutch 提供了一个简单的搜索接口,用户可以通过该接口查询索引库中的内容,实现基本的搜索引擎功能。 通过深入学习和实践 Apache Nutch 2.3,你可以掌握网络爬虫的基本原理和技术,为构建自己的...
5. **搜索接口(Search Interface)**:Nutch 提供了一个简单的搜索API,可以用来查询索引并返回结果。结果通常按照相关性排序,相关性计算基于TF-IDF等算法。 6. **配置和扩展(Configuration and Extension)**:...
Apache Nutch 是一个开源的网络爬虫框架,用于构建大规模的全文搜索引擎。Nutch 1.9 是一个较旧但稳定的版本,相比2.x系列,它不需要依赖像HBase这样的非关系型数据库,因此在部署和维护上可能更加简单。这个压缩包 ...
Apache Nutch是一个强大的开源搜索引擎项目,完全用Java编写,旨在为用户提供高效、可扩展的网络爬虫和全文检索解决方案。Nutch的版本2.1是一个成熟的版本,包含了多个改进和优化,使其在处理大规模网页抓取和索引时...
在这本书《Web Crawling and Data Mining with Apache Nutch》中,作者详细介绍了如何使用Nutch进行网络爬取和数据挖掘,包括Nutch的安装、配置、使用、以及一些高级功能的探讨。本书适合有一定编程背景的读者,尤其...
Nutch是一个基于Java开发的开源网络爬虫搜索引擎,它是Apache软件基金会项目之一,主要用于抓取网页,索引网页内容,并且支持全文搜索。Nutch搜索引擎能够对局域网和整个Web进行爬取,且提供了一个命令行工具来控制...
下面是一个简单的Java示例,展示如何从Nutch段中提取信息: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org....
此外,我们还将介绍如何进行简单的测试,以确保Nutch正确地执行网页爬取任务。 #### 环境准备与项目导入 - **JDK/JRE版本要求**:确保Eclipse环境中的JDK和JRE版本不低于1.6,这是Nutch-0.9正常编译和运行的基础...
- **与 Solr 的关系**: Nutch 通常与 Apache Solr 集成使用,Solr 是一款开源全文搜索引擎框架,能够帮助用户高效地搜索 Nutch 爬取的网页内容。 #### 二、安装前所需工具及软件 1. **JDK 1.7** - **下载地址**: ...
6. **测试Nutch**:为了验证Nutch是否正常工作,你可以先让Nutch抓取一些简单的网页,然后使用Nutch生成的索引文件在本地Lucene搜索服务中搜索内容,查看是否能正确返回结果。 在实际操作中,可能会遇到一些问题,...
1. **下载并安装Nutch** - 从Apache官方网站下载最新版本的Nutch,解压缩到你选择的目录,例如 `D:\Nutch-1.0.2`。 2. **配置工作目录** - 使用Cygwin进入Nutch的安装目录,例如 `cd /cygdrive/d/nutch-1.0`。 3. **...
10. **Web UI**:Nutch提供了一个简单的Web界面,用于监控抓取进度、查看日志、管理配置等。 在`apache-nutch-1.5.1`这个压缩包中,你将找到源代码、构建脚本、文档、配置文件以及示例数据。通过对这些内容的阅读和...
Nutch 是一个高度可扩展且开放源代码的网络爬虫项目,由 Apache 软件基金会维护。它不仅能够抓取网页,还能进行全文检索,通常运行在 Linux 环境下。而 MyEclipse 是一款功能强大的集成开发环境 (IDE),用于 JavaEE ...
在Windows环境下配置Apache Nutch是一项复杂但至关重要的任务,它涉及到搜索引擎的基础构建,特别是对于那些需要自建数据抓取和索引系统的项目。Nutch是一个开源的网络爬虫项目,它能够高效地抓取互联网上的网页,并...
8. **搜索**:最后,Nutch 提供了一个简单的搜索接口,用户可以通过关键词搜索索引库中的内容。 **Nutch 和 Hadoop 的关系** Nutch 与 Hadoop 密切相关,因为 Nutch 是 Hadoop 生态系统的一部分。Hadoop 提供了...
- **README.txt**:提供项目的简要介绍和安装、运行指南。 - **NOTICE.txt**:列出项目中使用的第三方软件及版权信息。 - **lib**:存放Nutch依赖的库文件,包括Java类库和其他必要的二进制文件。 - **bin**:...
全网爬取涉及更多的概念和技术细节,下面将简要介绍这些概念及其配置步骤。 ##### 5.1 全网爬取:概念 全网爬取涉及到以下主要概念: 1. **注入 (Inject)**:将初始 URL 注入到待爬取队列中。 2. **生成 ...
本部分将简要介绍Nutch插件的实际应用案例,包括中文分词插件、索引字段增强插件等。通过具体实例,读者可以更好地理解Nutch插件是如何在实际场景中发挥作用的,以及如何根据自身需求开发和集成插件。 #### 五、在...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行数据处理和搜索。Nutch 1.5 是该项目的一个稳定版本,提供了许多关键的功能和改进。这个"nutch工具包"包含了Nutch ...