Nutch0.9代码详细分析之2 主要分析网页爬取之后的页面处理
前一次主要介绍了Nutch爬取网页的流程,在爬取完网页后返回一个ProtocalOutput对象,对爬行回来的信息进行了封装,包括ProtocalStatus返回的HTTP状态码,Content网页的主体内容等信息信息。在Fetcher中,如果我们继续往下看,会看到nutch根据不同的ProtocalStatus返回的状态码进行相应页面主体内容的分析处理。主要的代码如下,分析见注释 fetcherThread.run()的方法主体框架:
try { boolean redirecting;//一个url的使用了重定向标记
int redirectCount = 0;//记录一个url重定向次数必须小于maxRedirect
//见分析 1 中的爬取主要流程,返回一个ProtocalOutput,status纪录了返回的HTTP状态码 switch(status.getCode()) {
case ProtocolStatus.SUCCESS: // got a page
//关键是output方法,该方法通过调用this.parseutil.parse(Content),利用HTMLParser对于爬取下来的网页进行分析,把结果的信息存储在Parse这个类中,包括了网页内容,标题,outlinks,metadata都在这一部进行封装.返回一个parseStatus类,表示这次网页分析是否成功
// url:是这次爬取的目标url datum:CrawlDatum类,存储了关于这个url的爬取相关信息 status:网页爬取下来后,HTTP协议所返回的状态象200,300~400,404之类 CrawlDatus里面标识这个url被顺利爬取的static值
pstatus = output(url, datum, content, status,CrawlDatum.STATUS_FETCH_SUCCESS);
updateStatus(content.getContent().length);
if (pstatus != null && pstatus.isSuccess() &&pstatus.getMinorCode()
== ParseStatus.SUCCESS_REDIRECT) {
//如果url是重定向的,进行相应地处理存储新的url在newurl中,如果newurl和这次爬取的url相同
//那么放弃,如果不同则设置redirecting=true,在一次对这个newurl进行爬取,直到爬取成功或者redirectcount>maxredirect
String newUrl = pstatus.getMessage();
. . . break;
case ProtocolStatus.MOVED:// 如果网页进行了重定向情况下处理,同上分析
case ProtocolStatus.TEMP_MOVED: . . . break;
case ProtocolStatus.EXCEPTION: // 出现了错误怎么办?
logError(url, status.getMessage());break;
// 网页没有找到几种情况,Content=null
case ProtocolStatus.GONE: // gone
case ProtocolStatus.NOTFOUND:
case ProtocolStatus.ACCESS_DENIED:
case ProtocolStatus.ROBOTS_DENIED:
case ProtocolStatus.NOTMODIFIED:
output(url, datum, null, status, CrawlDatum.STATUS_FETCH_GONE);
break;
default:. . . }
//如果设置了重爬标记,那么重新爬取新的url
} while (redirecting && (redirectCount < maxRedirect));
如果有人曾经和我一样,疑问nutch如何对网页进行分析呢?以上分析后关键就是output方法了。(当然自己写一个网页分析的不会多难,那我们具体看下nutch怎么做地?肯定是有帮助咯.)
Output:方法主体框架:它做了好多事情啊.
//key :分析该url的文本内容 datum:该url的相关信息 Content 该url文本内容 pstatus 返回的爬取状态传进来的code与pstatus是对应地
ParseStatus output(Text key, CrawlDatum datum, Content content, ProtocolStatus pstatus, int status)
{. . . try {//在页面分析前对一个url的权重得分计算,默认是不变,这里如果想改进爬虫的侧重点的可以做点文章.^-^
scfilters.passScoreBeforeParsing(key, datum, content);} catch (Exception e) {}
Parse parse = null;//新建一个用于封装爬取内容主体的Parse类,涉及了ParseData类,封装信息包括了页面标题,主体,outlinks等.
if (parsing && status == CrawlDatum.STATUS_FETCH_SUCCESS) {
ParseStatus parseStatus;
try {//这里使用HtmlParser进行主体内容的信息封装,当然具体有兴趣地可以继续看,涉及neko和tagsoup两种不同的方式去浏览文本内容,一个是基于Dom的一个是基于SAX的.nutch就是根据配置文件里的信息,默认使用neko基于Dom的方式给网页进行Dom树建立地.在HTMLParser.getParse(Content)方法中是详细的,根据DocumentFragment root这个根节点信息对Parse类进行封装从而返回这个Parse类
parse = this.parseUtil.parse(content); parseStatus = parse.getData().getStatus();
} catch (Exception e) {...}
...//这里要计算一个网页的签名??我不知道是什么意思.一个网页的签名是什么意思我还没弄懂.希望有朋友给我解释下
byte[] signature = SignatureFactory.getSignature(getConf()).calculate(content, parse);. . .
try {//在分析结束后重新计算得分
scfilters.passScoreAfterParsing(key, content, parse);
} catch (Exception e) {}
try {
//执行了分布式的任务,再以后我会对这个底层分布式文件系统Hadoop做更详细地分析咯.这个好难啃ORZ
output.collect
(key,new FetcherOutput(datum,storingContent ? content : null,
parse != null ? new ParseImpl(parse) : null));
} catch (IOException e) {}
//返回分析文本的状态.
if (parse != null) return parse.getData().getStatus();else return null;} }
分享到:
相关推荐
`apache-nutch-2.3.1-src.tar.gz` 是 Apache Nutch 的源代码包,版本号为 2.3.1,以 tar.gz 格式压缩。 这个压缩包中包含的主要文件和目录结构如下: 1. **src**: 这是 Nutch 的源代码存放位置,分为多个子目录,...
在研究和使用Nutch-2.1源代码时,你可以深入了解搜索引擎的各个组成部分,如爬虫的实现、索引过程的细节、查询处理的算法等,这对于提升自己的搜索引擎技术知识非常有帮助。同时,Nutch也是研究搜索引擎优化(SEO)...
Nutch 的源代码解析对于深入理解搜索引擎的工作原理以及自定义搜索引擎的实现非常有帮助。下面我们将详细探讨 Nutch 的注入(Injector)过程,这是整个爬取流程的第一步。 Injector 类在 Nutch 中的作用是将输入的 ...
这个`apache-nutch-1.6-src.tar.gz`文件包含了Nutch 1.6的源代码,允许开发者深入研究其内部机制,定制自己的爬虫需求,或者为项目贡献代码。 源代码包`apache-nutch-1.6`中通常包含以下几个关键部分: 1. **源...
2. **配置**:编辑conf/nutch-site.xml文件,设置如存储路径、抓取间隔、抓取范围等相关参数。 3. **创建种子**:在conf/urls目录下创建种子文件,列出要开始抓取的初始URL。 4. **运行Nutch**:使用bin/nutch命令行...
这个源码包 "apache-nutch-1.3-src.tar.gz" 和 "nutch-1.3.tar.gz" 包含了 Nutch 1.3 的源代码和编译后的二进制文件,对于开发者和研究者来说是非常有价值的资源。 **Nutch 概述** Nutch 是基于 Java 开发的,遵循 ...
在“apache-nutch-1.7-src.tar.gz”这个压缩包中,你将获得Nutch 1.7的源代码,这使得开发者可以深入了解其工作原理,并对其进行定制和扩展。解压后的文件夹“apache-nutch-1.7”包含了所有必要的组件和配置文件。 ...
nutch配置nutch-default.xml
Nutch是一款刚刚诞生的完整的开源搜索引擎系统,可以结合数据库进行索引,能快速...Nutch的开放源代码方便任何人去查看Nutch排序算法的工作流程。因此Nutch就可以更好的发展,为那些爱好搜索引擎的人们提供了一个平台。
4. **配置与部署**:解压 "apache-nutch-1.9" 文件后,需要根据你的环境配置`conf/nutch-site.xml`文件,设置包括抓取间隔、并发度、存储路径等参数。同时,可能还需要配置`conf/regex-urlfilter.txt`和`conf/...
相对于那些商用的搜索引擎, Nutch作为开放源代码 搜索引擎将会更加透明, 从而更值得大家信赖. 现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为什么一个网页会排在一个特定的位置. 除此之外, 有的搜索...
apache-nutch-1.4-bin.tar.gz.part2
nutch不用安装,是个应用程序,下载后为nutch-1.6.tar.gz,双击桌面上的cygwin快捷方式;执行以下命令: $ cd D:/Downloads/Soft $ tar zxvf nutch-1.0.tar.gz 在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境...
apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译 apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译
apache-nutch-1.4-bin.part2
在 `apache-nutch-1.13` 的源代码中,你可以看到以下关键组件和目录结构: - `src/java`:包含 Nutch 的核心 Java 类库,如爬虫逻辑、索引和搜索模块。 - `src/conf`:存放配置文件,如 `nutch-site.xml`,用于设置...
在`apache-nutch-1.5.1`这个压缩包中,你将找到源代码、构建脚本、文档、配置文件以及示例数据。通过对这些内容的阅读和实践,你可以深入了解搜索引擎的运作机制,进一步提升你的Java编程和分布式系统技能。同时,...
nutch-1.0-dev.jar nutch devlope