之前对nutch进行些分析,打算在基础上进行一些应用,不过最近忙着,也没弄出个所以然,先把阅读心得贴出来,里边可能有不少理解上的错误,仅供参考用,万一突然有人转载了,请保留blog出处 。也希望能认识跟多对此话题感兴趣的朋友。
主要类分析:
一、org.apache.nutch.crawl.Injector:
1,注入url.txt
2,url标准化
3,拦截url,进行正则校验(regex-urlfilter.txt)
4,对符URL标准的url进行map对构造<url, CrawlDatum>,在构造过程中给CrawlDatum初始化得分,分数可影响url host的搜索排序,和采集优先级!
5,reduce只做一件事,判断url是不是在crawldb中已经存在,如果存在则直接读取原来CrawlDatum,如果是新host,则把相应状态存储到里边(STATUS_DB_UNFETCHED(状态意思为没有采集过))
二、org.apache.nutch.crawl.Generator:
1,过滤不及格url (使用url过滤插件)
2,检测URL是否在有效更新时间里
3,获取URL metaData,metaData记录了url上次更新时间
4,对url进行打分
5,将url载入相应任务组(以host为分组)
6,计算url hash值
7,收集url, 直至到达 topN 指定量
三、org.apache.nutch.crawl.Fetcher:
1,从segment中读取<url, CrawlDatum>,将它放入相应的队列中,队列以queueId为分类,而queueId是由 协议://ip 组成,在放入队列过程中,
如果不存在队列则创建(比如javaeye的所有地址都属于这个队列:http://221.130.184.141) --> queues.addFetchItem(url, datum);
2,检查机器人协议是否允许该url被爬行(robots.txt) --> protocol.getRobotRules(fit.url, fit.datum);
3,检查url是否在有效的更新时间里 --> if (rules.getCrawlDelay() > 0)
4,针对不同协议采用不同的协议采用不同机器人,可以是http、ftp、file,这地方已经将内容保存下来(Content)。 --> protocol.getProtocolOutput(fit.url, fit.datum);
5,成功取回Content后,在次对HTTP状态进行识别(如200、404)。--> case ProtocolStatus.SUCCESS:
6,内容成功保存,进入ProtocolStatus.SUCCESS区域,在这区域里,系统对输出内容进行构造。 --> output(fit.url, fit.datum, content, status, CrawlDatum.STATUS_FETCH_SUCCESS);
7,在内容构造过程中,调取内容解析器插件(parseUtil),如mp3\html\pdf\word\zip\jsp\swf……。 --> this.parseUtil.parse(content); --> parsers[i].getParse(content);
8,我们现在研究html解析,所以只简略说明HtmlParser,HtmlParser中,会解析出text,title, outlinks, metadata。
text:过滤所有HTML元素;title:网页标题;outlinks:url下的所有链接;metadata:这东西分别做那么几件事情 首先检测url头部的meta name="robots" 看看是否允许蜘蛛爬行,
其次通过对meta http-equiv refresh等属性进行识别记录,看页面是否需要转向。
四、org.apache.nutch.parse.ParseSegment:
1,这个类逻辑就相对简单很多了哦,它对我们也是很有价值的,它只做一件事情,就是对爬行下来的Content(原始HTML)进行解析,具体解析通过插件来实现。
比如我们要做的数据分析、数据统计都可以在这进行实现。
2,执行完成后,输出三个Map对<url,ParseText>解析内容、<url,ParseData>包含所有链接的分析后的结果 、<url,CrawlDatum>outlinks
五、org.apache.nutch.crawl.CrawlDb:
主要根据crawld_fatch输出更新crawldb。
1,map对crawld_fatch、crawldb地址进行标准化(nomalizer)和拦截操作(filte);
2,reduce在对两crawld_fatch和crawldb进行合并更新。
六、org.apache.nutch.crawl.LinkDb:
这个类的作用是管理新转化进来的链接映射,并列出每个url的外部链接(incoming links)。
1,先是对每一个url取出它的outLinks,作map操作把这个url作为每个outLinks的incoming link,
2,在reduce里把根据每个key来把一个url的所有incoming link都加到inlinks里。
3,这样就把每个url的外部链接统计出来了,注意,系统对只对外部链接进行统计,什么叫外部链接呢,就是只对不同host进行统计,
记住iteye.com和biaowen.iteye.com是两个不同的host哦。 --> boolean ignoreInternalLinks = true;
4,然后一步是对这些新加进来的链接进行合并。
七、org.apache.nutch.crawl.Indexer:
这个类的任务是另一方面的工作了,它是基于hadoop和lucene的分布式索引。它就是为前面爬虫抓取回来的数据进行索引好让用户可以搜索到这些数据。
这里的输入就比较多了,有segments下的fetch_dir,parseData和parseText,还有crawldb下的 current_dir和linkdb下的current_dir。
1,在这个类里,map将所有输入都装载到一个容器里边,
2,在到reduce进行分类处理,
3,实现拦截 --> this.filters.filter(doc, parse, key, fetchDatum, inlinks);
4,打分 --> this.scfilters.indexerScore(key, doc, dbDatum,fetchDatum, parse, inlinks, boost);
5,当然要把这些数据体组合成一个 lucene的document让它索引了。
6,在reduce里组装好后收集时是<url,doc>,最后在输出的OutputFormat类里进行真正的索引。
doc里有如下几个field
content(正文)
site (所属主地址)
title (标题)
host (host)
segement (属于哪个segement)
digest (MD5码,去重时候用到)
tstamp (暂时不知道什么东西)
url (当前URL地址)
载了一个例子:
doc =
{content=[biaowen - JavaEye技术网站 首页 新闻 论坛 博客 招聘 更多 ▼ 问答 ………………(内容省略)………… biaowen 永NF/ICP备05023328号],
site=[biaowen.iteye.com],
title=[biaowen - JavaEye技术网站],
host=[biaowen.iteye.com],
segment=[20090725083125],
digest=[063ba8430fa84e614ce71276e176f4ce],
tstamp=[20090725003318265],
url=[http://biaowen.iteye.com/]}
八、org.apache.nutch.crawl.DeleteDuplicates:
这个类的作用就是这它的名字所写的意思--去重。
前面索引后(当然不是一次时的情况)会有重复,所以要去重。为什么呢,在一次索引时是不重复的,可是多次抓取后就会有重复了。
就是这个原因才要去重。当然去重的规则有两种一个是以时间为标准,一种是以内容的md5值为标准。
九、org.apache.nutch.indexer.IndexMerger:
这个类就相对简单了,目的将多个indexes合并为一个index,直接调用lucene方法实现!
附带些参考资料:
目录结构,参考自《Lucene+Nutch搜索引擎开发》
一、crawldb 下载的url,以及下载日期,用来进行页面更新
二、segements 存放抓取页面和分析结果
1、crawl_generate:待下载url
2、crawl_fetch:每个下载url的状态
3、content:每个下载页面的内容
4、parse_text:包含每个解析过的url文本内容
5、parse_data:每个url解析出的外部链接和元数据
6、crawl_parse:用来更新crawl的外部链接库
三、linkdb 存放url的互联关系
四、indexes:存放每次下载的独立索引目录
五、index:符合lucene格式的索引目录,是indexes里所有index合并后的完整索引
分享到:
相关推荐
但在后续版本中,为了提高效率和功能,Nutch将索引的建立以及搜索交由Solr实现,从而形成了以Nutch为核心抓取和分析网页,以Solr为核心建立索引和提供搜索的分工合作模式。 具体的工作流程可以概括为以下步骤: 1....
Nutch是一款开源的网络爬虫项目,其主要功能在于抓取互联网上的网页,并对其进行分析、索引,以便用户能够快速检索到所需的信息。Nutch的灵活性和可扩展性使其成为了很多大型项目的基础工具。 Nutch的工作流程主要...
3. 链接分析(Link Analysis):Nutch使用PageRank算法或其他链接分析算法对网页进行排名,决定哪些页面更重要。 4. 索引(Indexing):重要性较高的网页被索引,以便后续的搜索查询。 5. 搜索(Searching):用户...
6. nutch分析方法和工具........33 6.1 Crawldb......33 6.2 Linkdb........35 6.3 Segments....35 6.4 Index..39 7. nutch分布式文件系统........41 2007-8-26 北京邮电大学-李阳 Nutch入门学习 7.1 概述...41 7.2...
由于Nutch使用了一些外部库,如MP3和RTF格式的解析库,你需要手动将这些库添加到项目的Classpath中。可以通过以下步骤实现: 1. 访问Nutch的源码库,找到相应的库文件: - MP3解析库:`...
Nutch 是一个开源的全文搜索引擎框架,主要用于网络数据的抓取、索引和搜索。它由Apache软件基金会开发,是Hadoop项目的一部分,利用分布式计算技术处理大规模的互联网数据。 ### Nutch 简介 Nutch的目标是提供一个...
Nutch爬虫系统分析 Nutch是一款开源的网络爬虫系统,能够高效地抓取网页内容并将其存储在数据库中。本文将对Nutch爬虫系统进行详细的分析,包括Nutch的体系结构、抓取部分、配置文件分析等方面。 一、Nutch简介 ...
本文主要分析Nutch爬虫的工作流程及其涉及的文件格式。 Nutch的爬虫部分主要负责从互联网上抓取网页并构建索引。这一过程可以分为几个关键步骤: 1. **生成Fetchlist**: - Nutch首先基于现有的Web数据库(WebDB...
以下是对 Nutch 0.9 版本的一些关键知识点的详细解释: 1. **Nutch 概述**: Nutch 是 Apache 基金会的一个项目,旨在创建一个可扩展、高性能的互联网搜索引擎。它是一个基于 Java 的开源软件,支持分布式计算,...
- 运行Nutch的基本命令,如抓取种子URL (`bin/nutch inject`), 分析网页 (`bin/nutch fetch`), 解析内容 (`bin/nutch parse`), 更新数据库 (`bin/nutch updatedb`),生成索引 (`bin/nutch index`). 5. **Nutch 与 ...
- **链接分析**:Nutch使用PageRank算法对网页进行排名,根据网页的重要性和相关性进行索引。 - **文本分析**:Nutch内置了Lucene库,用于分词、去除停用词、词干化等文本预处理。 - **索引和搜索**:抓取并处理...
因为 Nutch 原生设计在 Linux 环境下运行,所以在 Windows 上配置 Nutch 需要一些额外的步骤。主要有两种方法: - **在 Eclipse 中使用 Nutch**: - 创建一个新的 Java 项目。 - 导入 Nutch 源码,将 `src\java`...
基本原理分析部分详细介绍了Nutch的工作流程,包括爬虫的工作策略和流程、索引的主要过程以及搜索和分析的过程。索引部分特别提到了倒排索引(inverted index)的构建过程,它是搜索引擎中用于快速检索的关键技术之...
通过阅读提供的“Nutch入门教程.pdf”,你可以学习如何安装Nutch、配置环境、创建并运行爬虫任务、查看抓取日志、分析抓取结果、调试插件等步骤,逐步掌握Nutch的使用。 总结来说,Nutch是一款强大的开源搜索引擎...
2. **插件体系**:Nutch 采用插件架构,用户可以根据需要编写自定义的抓取、解析、分析等插件。 3. **多语言支持**:Nutch 支持多种语言的网页抓取,可以通过调整配置来处理非英文内容。 4. **调度策略**:Nutch ...
资源中urls.txt是我nutch单步执行过程的种子文件,里面的ppt主要讲解nutch单步执行流程,并获取每次单步执行的结果文件,对文件进行分析,同时ppt还讲解了nutch的插件的基础知识,不是很详细,但是可以作为参考。...
Nutch搜索引擎的应用不仅限于简单的数据抓取和索引,它还能帮助开发者进行网页内容的深度分析,支持复杂网络数据的高效处理。对于希望构建个人搜索引擎或对互联网内容进行深入研究的用户来说,Nutch是一个非常实用的...
Nutch分析方法和工具部分讨论了Crawldb、Linkdb、Segments和Index等工具的使用方法。 分布式文件系统部分概述了Nutch的文件系统,包括MapReduce、文件系统语法、设计、可用性以及Nutch文件系统工作架构。 在应用...
以下是 Nutch 1.2 项目中的一些核心知识点: 1. **环境配置**:在使用 Nutch 之前,你需要确保你的系统安装了 Java 开发环境(JDK),并且设置了 JAVA_HOME 环境变量。同时,你也需要配置 Hadoop 环境,因为 Nutch ...