- 浏览: 474051 次
- 性别:
- 来自: 湖南
文章分类
- 全部博客 (201)
- j2ee (43)
- oracle (9)
- mysql (7)
- db2 (1)
- j2se (3)
- spring (1)
- hibernate (3)
- struts (0)
- Berkeley DB (0)
- linux (60)
- Apache2+PHP+MYSQL (2)
- solr (15)
- svn (1)
- IntelliJ Idea (1)
- eclipse,myeclipse (4)
- ant (2)
- vim (8)
- IT生活 (4)
- 测试 (6)
- lucene (4)
- shell (1)
- nutch (18)
- thread (1)
- hadoop (5)
- mapreduce (0)
- Python (4)
- 硬件 (1)
- database (1)
- maven (1)
- 正则表达 (0)
- 互联网 (1)
最新评论
-
youngcoder:
good job
HTTP协议头部与Keep-Alive模式详解 -
javazdq:
受教了 解释的不错。
lucene创建索引高级特性和索引创建参数优化 -
josico:
有几个问题想问下楼主1. LinkedBlockingQueu ...
生产者-消费者-BlockingQueue -
annybz:
有没有关于 BlockingQueue和ConcurrentL ...
生产者-消费者-BlockingQueue -
uniquejava:
多谢,记录的很真实。
DB2 学习记录
Crawl类的时序图。
流程如下:
1. 建立初始URL 集
2. 将URL 集注入crawldb 数据库---inject
3. 根据crawldb 数据库创建抓取列表---generate
4. 执行抓取,获取网页信息---fetch
5. 更新数据库,把获取到的页面信息存入数据库中---updatedb
6. 重复进行3 ~5 的步骤,直到预先设定的抓取深度。--- 这个循环过程被称为“ 产生/ 抓取/ 更新” 循环
7. 根据sengments 的内容更新linkdb 数据库---invertlinks
8. 建立索引---index
一、 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合并后的完整索引
来源:http://dev.firnow.com/course/3_program/java/javajs/20100719/459450.html
发表评论
-
网页去重
2011-01-11 09:34 2060搜索引擎判断复制网页一般都基于这么一个思想:为每个网页计算出一 ... -
nutch 抓取动态网页设置
2010-12-04 22:48 3783nutch过滤规则crawl-urlfilter.t ... -
nutch 中的MapReduce详细分析
2010-12-02 22:48 1804作者:马士华 发表于: ... -
提高Nutch局域网抓取的速度
2010-11-30 19:36 1291提高Nutch局域网抓取的速度 如果想要提高N ... -
nutch 过滤掉不正确的URL实现方法:
2010-11-29 22:39 1955nutch 1.0 读源码,过滤掉不正确的URL实现方法: ... -
nutch中Nutch-defaul.xml相关配置
2010-11-28 22:27 1851Nutch-default.XML相关 ... -
Nutch中文分词总结
2010-11-18 19:06 25261 中文分词介绍 中文分词是在做检索类系统时需要重点考虑 ... -
nutch累积式抓取
2010-11-13 22:48 2310最近在网上查了好多关于nutch增量式抓取的脚本,但是我 ... -
提高Nutch局域网抓取的速度
2010-11-13 22:25 1568如果想要提高Nutch局域网抓取的速度,大家第一个想到 ... -
nutch如何才能抓取到动态的url
2010-11-13 08:09 3031nutch如何才能抓取到动 ... -
Nutch-0.9源代码:Crawl类整体分析
2010-11-09 19:43 1323Nutch-0.9源代码:Crawl类整体分析 N ... -
网络爬虫调研报告
2010-11-09 19:26 1805网络爬虫调研报 ... -
配置完成nutch容易出现的错误
2010-11-09 09:14 2389配置完成nutch容易出现的错误 1.1.2 ... -
Nutch1.0的配置与运行
2010-11-09 09:10 944Nutch1.0的配置与运行 ... -
Nutch1.0的配置与运行
2010-11-08 11:17 1019Nutch1.0的配置与运行 ... -
Nutch的资料
2010-11-08 10:59 1419Nutch的资料 http://issues. ... -
nutch的基本工作流程理解
2010-11-08 10:57 1428(一): Nutch 的工作流程: ...
相关推荐
描述Nutch的工作流程,介绍Nutch对页面获取、分析、建立索引的过程。
1.1 Nutch 基本原理 1.1.1 Nutch 基本组成 1.1.2 Nutch 工作流程 1.2 Nutch 流程详解 1.2.1 Nutch 数据流程 1.2.2 Nutch 流程分析
Nutch爬虫工作流程及文件格式详细分析!!!!!
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爬虫工作流程及文件格式详细分析,文档不大
nutch爬虫系统分析.doc
nutch爬虫系统分析报告.doc
nutch爬虫系统分析设计论文.doc
毕业论文-nutch爬虫系统分析.doc
nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据
nutch 搜索模块流程 详细简述nutch搜索详细过程
资源中urls.txt是我nutch单步执行过程的种子文件,里面的ppt主要讲解nutch单步执行流程,并获取每次单步执行的结果文件,对文件进行分析,同时ppt还讲解了nutch的插件的基础知识,不是很详细,但是可以作为参考。...
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 概述....
大学毕设论文--nutch爬虫系统分析设计论文.doc
Nutch的插件机制分析,了解Nutch的插件机制
包括nutch的参考书,和NUTCH源代码分析
nutcher 是 Apache Nutch 的中文教程,在... Nutch流程控制源码详解(bin/crawl中文注释版) Nutch教程——URLNormalizer源码详解 Nutch参数配置——http.content.limit 文档截图:
Hadoop是大数据的核心技术之一,而Nutch集Hadoop之大成,是Hadoop的源头。学习Hadoop,没有数据怎么办?用Nutch抓!学了Hadoop的Map Reduce以及HDFS,没有实用案例怎么办?学习Nutch!Nutch的很多代码是用Map Reduce...
nutch1.4帮助文档,学习nutch1.4必备,最新nutch1.4核心类解读!