1、inject中以读取文件的方式传入自定义参数:
datum.getMetaData().put(KEY, VALUE);
将文件中读取的参数加入。
2、fetch中 传递参数:
1、run方法中由QueueFeeder爬取队列维护爬取列表。
2、根据自定义的线程数量启动FetcherThread线程。
3、FetcherThread从队列中以原子方式获取爬取地址,爬取该地址网页内容并进行解析。解析过程由output()方法封装,该方法中传递参数依靠content来实现,如:
content.getMetadata().set(KEY, datum.getMetaData().get(KEY).toString());
由此将indect中datum传入的参数交给content。
4、
output()方法
中parseResult变量为解析页面返回变量。
if (parseResult != null) {}部分目前为止未发现存在代码执行的情况,为了避免漏洞给予考虑,在for循环中增加
parseData.getContentMeta().set(KEY, datum.getMetaData().get(KEY).toString());
此时解析页面结果保存了参数。在解析结果子链接中增加如下代码:
if (maxOutlinkDepth > 0 && outlinkDepth < maxOutlinkDepth) {
........
while(iter.hasNext() && outlinkCounter < maxOutlinkDepthNumLinks) {
reporter.incrCounter("FetcherOutlinks", "outlinks_following", 1);
// Create new FetchItem with depth incremented
//追加修改,重新创建Datum,将父类的网站各项站点属性加入子链接中。
CrawlDatum outLinkDatum = new CrawlDatum(CrawlDatum.STATUS_LINKED, interval);
if(datum.getMetaData().get(CrawlUrlConstants.SOURCE) != null){
outLinkDatum.getMetaData().put(KEY, datum.getMetaData().get(KEY));
}
.......
fetchQueues.addFetchItem(fit);
outlinkCounter++;
}
}
5、parseSegment中解析页面内容(注意:4中解析部分目前发现在此处实现)。
public void map(WritableComparable key, Content content,
OutputCollector<Text, ParseImpl> output, Reporter reporter)
方法中
parseResult = new ParseUtil(getConf()).parse(content);
实现页面解析,解析由自定义parse、filter接口实现,在filter中传递参数代码如下:
parse.getData().getContentMeta().set(key, content.getMetadata().get(key));
job作业格式化
public void reduce(Text key, Iterator<Writable> values,
OutputCollector<Text, Writable> output, Reporter reporter)
throws IOException {
output.collect(key, (Writable)values.next()); // collect first value
}
汇总的结果。
job.setOutputFormat(ParseOutputFormat.class);
指定了格式化对象,并传递参数,代码如下:
return new RecordWriter<Text, Parse>() {
public void write(Text key, Parse parse)
throws IOException {
......
for (int i = 0; i < links.length && validCount < outlinksToStore; i++) {
......
//追加自定义属性:向子链接datum对象添加父链接的属性。
if(parseData.getContentMeta().get(KEY) != null){
target.getMetaData().put(KEY, new Text(parseData.getContentMeta().get(KEY)));
}
.....
targets.add(new SimpleEntry(targetUrl, target));
......
validCount++;
}
.....
};
以上代码展示了参数传递的各个部分,仅供参考!
分享到:
相关推荐
nutch1.4帮助文档,学习nutch1.4必备,最新nutch1.4核心类解读!
使用`bin/nutch crawl urls -dir <output_dir> -depth <depth> -topN <num>`命令启动爬虫,其中`<output_dir>`指定爬行结果的存储目录,`<depth>`设定爬行深度,`<num>`控制每层深度的最大爬行页面数。 #### 五、...
Nutch 1.4是该项目的一个稳定版本,发布于2012年,尽管后续有更新的版本,但1.4版本因其稳定性及广泛的应用而备受青睐。在深入探讨Nutch 1.4的知识点之前,我们先来了解一下什么是Apache Nutch。 Apache Nutch是一...
- **步骤**: 打开 Cygwin,进入 `nutch-1.4/runtime/local` 目录(如解压到 D 盘,则路径为 `/cygdrive/d/apache-nutch-1.4/runtime/local`)。 - **命令**: 输入 `bin/nutch`,如果显示命令信息提示,则表示 Nutch ...
- **注意事项**:文档中指出使用 JDK1.5 可能在编译过程中出现失败的情况,因此推荐使用 JDK1.6。 **1.2 Eclipse 安装** - **下载地址**:文档中提供的下载地址为 [Eclipse 官方下载页面]...
apache-nutch-1.4-bin.tar.gz.part2
1. **爬虫(Spider)**:Nutch 的爬虫负责在网络中发现新的页面并跟踪链接进行抓取。它通过种子URL开始,然后遍历网页,遵循robots.txt协议,尊重网站的抓取规则。 2. **抓取模块(Fetcher)**:负责下载网页内容。...
Nutch 的爬虫数据通常包括了它在抓取过程中收集到的网页URL、网页内容、元数据以及爬取日志等信息。 在Nutch的数据流程中,主要涉及以下几个关键步骤: 1. **种子URL生成**:爬虫的起点是种子URL列表,这些URL决定...
Nutch是一款开源的网络爬虫项目,主要用于抓取和索引互联网上的网页内容。它由Apache软件基金会开发,是Hadoop大数据生态系统的一部分,利用Java语言编写。本资料包围绕Nutch爬虫,提供了相关的参考书籍和源代码分析...
Apache Nutch 是一款高度可扩展的开源全文搜索引擎框架,它为构建自定义的网络爬虫和搜索引擎提供了强大的工具集。Nutch 的设计目标是处理大量网页数据,进行高效的抓取、索引和搜索操作。在“apache-nutch-1.4-src....
一个已经部署好的 nutch1.7爬虫。 导入到 eclipse里面就能用了。假如不能用的话。 还是装个cygwin 吧 找到org.apache.nutch.crawl.Crawl 这个类。 run configuration 在 Programa argument 里面 输入 crawl urls -...
3.3 配置Nutch:在conf目录下,你需要编辑nutch-site.xml文件,配置爬虫的参数,如抓取间隔、抓取范围、URL过滤规则等。 3.4 运行Nutch:在Eclipse中,可以直接运行Nutch的main方法,如org.apache.nutch.crawl....
apache-nutch-1.4-bin.part2
apache-nutch-1.4-bin.part1
基于Apache Nutch 1.8和Htmlunit组件,实现对于AJAX加载类型页面的完整页面内容抓取解析。 According to the implementation of Apache Nutch 1.8, we can't get dynamic ...
Nutch是一个开源的网络爬虫框架,由Apache基金会开发和维护。它能够高效地抓取并处理海量数据,并提供了丰富的插件来支持各种数据源和处理方式。由于其高度可定制化和易于扩展的特性,Nutch被广泛应用于搜索引擎、...
Nutch的工作流程涉及到多个子操作,如: - **创建新的WebDb**(admin/webdb/clean) - **生成Fetchlist**(bin/nutch urlfilter) - **抓取网页**(bin/nutch fetch) - **更新WebDB**(bin/nutch updatedb) - **...
nutch爬虫系统分析 Nutch爬虫系统是基于Java语言开发的一款开源网络爬虫框架,旨在提供一个灵活、可扩展、可靠的爬虫解决方案。下面是对Nutch爬虫系统的分析。 Nutch简介 Nutch是一款基于Java语言开发的网络爬虫...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效的数据检索。v1.19 是该项目的一个稳定版本,提供了丰富的功能和改进,适用于研究、开发以及各种数据分析任务。...