crawl 脚本用来实现 nutch 中对于网页的抓取 分析 索引工作。
把工程下下来之后 ,进入到 bin 目录:
两个脚本文件 crawl nutch
crawl 是对nutch 的进一步封装
首先我们看一下他的注释:
# UNLIKE THE NUTCH ALL-IN-ONE-CRAWL COMMAND THIS SCRIPT DOES THE LINK INVERSION AND
# INDEXING FOR EACH SEGMENT
是的,正如注释中所说的,他为每一个segment 做抓取,倒排和索引工作。
略过一般常规性的判断,参数检查,他迎来了他的第一步:
inject
# initial injection
$bin/nutch inject $CRAWL_PATH/crawldb $SEEDDIR
这一步执行了 inject 操作, 咱们看看这一步是干什么的
打开 nutch 找到这么一句话:
elif [ "$COMMAND" = "inject" ] ; then
CLASS=org.apache.nutch.crawl.Injector
这就找到了程序的入口,咱们看一看。
整个项目都是构建在hadoop上的 , 我喜欢。
既然是hadoop,咱们就看看他是如何使用 mapreduce的。
Map中:
用咱们自己手动给出的url的集合作为输入, 拿到这个url的信息. 一些配置信息可能出现在 url的这个文件中,尽可能解析出来, 比如抓取间隔时间。
然后是规范化一些url ,用代码里的单词叫:urlNormalizers.normalize
这里用了责任链来处理这些url,责任链中定义了很多规范化的规则,传入scope参数,指定需要过哪些链。plugin的代码打成了一个jar包放在plugins 目录下,除了解压源代码,我还没找到什么好方法看他们到底干了什么, 以后心情好,可能拿出来讲一讲,今天就算了。咱们继续往下看。
然后是过滤,filters.filter(url); 跟规范化用的是差不多的流程,会过滤掉指定的url,比如拉黑的,一些前缀后缀不合格的等等,也是以插件的形式提供的。
scfilters.injectedScore(value, datum); 把分数的信息插进去,暂时不知道有什么用,先放着。
然后 map 输入了 , key是这个url,value是url的一些信息,比如抓取间隔是多少等等。
第二个Mapper
他的逻辑写的很奇怪,我差点看走眼, 紧接着他是用CrawlDbFilter 作为mapper,又做了个处理。
这个过程又把规范化和 filter过了一遍。个人估计是为了后续重新加入url,已经应对不同的状态做的额外的处理。
Reduce中:
首先会修改这个url的状态, 每个有关的url的信息中会携带一些关于url的状态, 在map中新加的状态是STATUS_INJECTED, 在reduce中会改成STATUS_DB_UNFETCHED ,然后就输出了,输出到crawlDB
总结,就是做了一些 规范化和 过滤。迫不及待的我要看下一步了。
generate
elif [ "$COMMAND" = "generate" ] ; then
CLASS=org.apache.nutch.crawl.Generator
第一个mapred中, 竟然 mapper,partitioner,reducer都是同一个类,Selector.class 看到这里笔者格外兴奋。
当然输入是crawlDB的位置,map的操作是过滤url这个万年不变的操作, 然后矫正抓取时间间隔,如果时间还早着,直接推出,否则,通过一定的filter给这些url打分,输出的竟然是得分,一个封装url和相关信息的对象。
partition 直接把同一个host 或者ip的url分到同一个reduce上,首先,会是得分高的url先弄,这就是为什么要拿score 作为key,作为map的输出,根据各种计算,算出这个url应该输出到哪个segment中,然后输出跟map一样的东西,只不过url相关信息中加入了 segment 的信息,然后通过Comparator 将同一个segment输入到一个文件中。
第二个mapred是更新crawldb, 这样下次就不会去重复抓同样的url了。
操作很简单,最终目标就是把时间信息设置进去,以便于下次判断。
然后重命名老的crawldb, 把更新后的放进去。
fetch
elif [ "$COMMAND" = "fetch" ] ; then
CLASS=org.apache.nutch.fetcher.Fetcher
这个流程比较简单,只有一个map,他实现的是maprunner ,所以我们看他的run方法。
这是一个典型的生产者消费者模式,生产者不断的从segment中读取数据,往队列里放,消费者就从队列里面取了,同样用插件的形式封装访问协议,根据不同的返回码,做不同的处理,目前只讨论成功的情况,我们会把成功内容输出,修改状态码。
总之,感觉这就是做了一个框架,所有细节的内容全在 插件里面。需要做爬虫的同学应该解读的是插件的代码。
相关推荐
在Nutch的爬取过程中,每次`nutch crawl`操作都会生成一个新的目录,包含爬取的网页数据、链接数据库(linkdb)、网页数据库(crawldb)和索引文件。当需要将多次爬取的结果合并成一个统一的数据库时,可以使用`...
在 Nutch 的开发过程中,Git 作为分布式版本控制系统,用于管理源代码的版本历史。GitHub 和 Bitbucket 可以作为 Git 仓库的托管平台。Ant 是用于构建 Nutch 项目的工具,它可以编译源代码,生成可运行的文件。 ...
你可以单独运行每个命令,或者通过`bin/crawl`脚本自动化整个过程。 六、Nutch与其他技术的集成 Nutch可以与Solr或Elasticsearch等搜索引擎集成,实现快速高效的搜索功能。此外,还可以与HBase等NoSQL数据库配合,...
如果显示出Nutch命令脚本的帮助文档,说明Nutch已成功安装。 **4. 网络爬行** Nutch的网络爬行分为内部网爬行和全网爬行。 **4.1 内部网爬行** 内部网爬行适用于大型网站的抓取。你需要: - **创建URL文件**:...
此外,Nutch 0.8 的 `crawl` 脚本也有更新。 **你需要了解的 Nutch** 1. **文档阅读**:深入了解 Nutch 需要阅读官方提供的文档,如 "Introduction to Nutch, Part 1 Crawling" 和 "Introduction to Nutch, Part 2...
2. 将Hadoop的`conf`目录添加到Nutch的类路径中,可以通过修改`bin/nutch`脚本来实现。 **六、监控和优化** 1. 使用Nutch的日志文件跟踪抓取进度和错误。 2. 调整抓取参数,如并发度、重试策略、超时设置等,以优化...
5. **启动爬虫**:运行Nutch的`bin/nutch`脚本,执行如`crawl`命令开始爬取过程。 6. **监控和调试**:观察日志文件,跟踪爬虫的运行状态,如有需要,进行问题排查和性能优化。 通过学习和研究Nutch源码,开发者...
1. **克隆项目**:使用Git从GitHub上克隆“nutch-windows-script”仓库到本地。 ``` git clone https://github.com/your-repo/nutch-windows-script.git ``` 2. **配置Nutch**:编辑`conf/nutch-site.xml`,设置...
4. **执行爬行命令**:使用`bin/nutch crawl urls -dir <output_dir> -depth <depth> -topN <num>`命令启动爬虫,其中`<output_dir>`指定爬行结果的存储目录,`<depth>`设定爬行深度,`<num>`控制每层深度的最大爬行...
Nutch 是一个高度可扩展的搜索引擎框架,它提供了从互联网收集数据、建立索引和提供搜索服务的能力。Nutch 0.9 版本发布于较早时期,但其核心原理和技术至今仍然对理解搜索引擎的工作机制具有重要意义。 2. **WAR ...
这个过程涉及的文件包括`conf`目录下的配置文件,如`nutch-site.xml`,以及`bin`目录下的脚本文件,如`nutch crawl`命令。 总的来说,Apache Nutch 1.2是构建大规模搜索引擎或进行网络数据分析的理想工具,它与...
这个过程通常涉及到Nutch提供的脚本和命令,如提交作业脚本`apache-nutch-1.6.job`给Hadoop JobTracker执行。 #### 六、Nutch脚本文件的重要性 7. **入门学习的重点**:对于初学者来说,理解和分析Nutch脚本文件是...
- 在文档中还提到了安装Cygwin以及将其添加到系统环境变量中,这是因为Windows平台下Nutch可能需要使用到Cygwin来执行某些命令或脚本。具体路径为`F:\cygwin\bin`。 #### 详细配置步骤 1. **配置`crawl-urlfilter...
尝试执行以下命令以查看 Nutch 命令脚本的文档: ``` bin/nutch ``` 现在,我们可以开始爬取了。有两种爬取方式: 1. **内部网爬取**:使用 `crawl` 命令。 2. **全网爬取**:使用更低级别的 `inject`, `generate`,...
**Nutch**是一个开源的Web抓取框架,它不仅能够帮助开发者抓取网络上的数据,还促进了多个重要开源项目的诞生和发展。通过Nutch项目,衍生出了几个在大数据处理领域非常著名的框架: 1. **Hadoop**:一个能够处理...
这个过程涵盖了Nutch的基本使用,包括从环境准备、爬行配置到数据检索的整个流程,是搭建一个简单Web搜索引擎的基础步骤。通过这样的配置和操作,用户可以自定义爬取范围,构建自己的网页索引库,实现个性化的信息...
例如,`bin/nutch crawl urls -dir crawl -depth 3 -topN 50` 命令会从 `urls` 文件中提取种子URL,开始爬行,深度为3,返回前50个结果。`-threads 4` 参数设置并发线程数为4,这样可以提高抓取速度。 **抓取结果**...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效的信息检索。Nutch 1.6 是该项目的一个稳定版本,提供了丰富的功能和良好的性能。这个`apache-nutch-1.6-src.tar...
### Nutch开源搜索引擎增量索引recrawl的终极解决办法续 #### 一、背景与问题概述 在前一篇文章中,我们探讨了Nutch开源搜索引擎在进行增量索引更新(recrawl)时遇到的问题及其初步解决方案。然而,在实际操作...