编写Nutch插件

软件版本:Nutch 1.7

Nutch Plugin的所有资料,都在官网这里, PluginCentral

##前提
在Eclipse里运行Nutch

Extension 和 Extension-point的关系

Extension point类似与Java语言里的接口(interface), extension 则是具体的实现(implementation)。

About Plugins里有一句话,Each extension-point defines an interface that must be implemented by the extension.

##Nutch里的各种概念
Extension point, extension, plugin, 这些概念是什么意思?见 Technical Concepts Behind the Nutch Plugin System

##Nutch 1.7 有哪些 Extension-point

ExtensionPoint 这个东西,本身也是一个插件,可以看看 src/plugin/nutch-extensionpoints/plugin.xml,里面定义了所有的扩展点,跟上图基本一致。

AboutPlugins这里列出来的是 Nuch 1.4的扩展点,有点过时了。

##一个Nutch的组成文件
build.xml, plugins.xml 等等

##Nutch 插件例子

  1. WritingPluginExample
  2. WritingPluginExample-1.2,针对Nutch 1.2的,有点老,但是值得一看
  3. Writing a plugin to add dates by Ryan Pfister

看来这3个例子,你应该就知道怎么开发插件了。

##Nutch 的缺点
在抓取的过程中,真正的难度在于, ip limit 和 user limit,可惜 Nutch 对这两个问题都没有解决方案。

  1. Nutch 的 HttpPostAuthentication 现在还没有开发完,导致无法抓取需要登录的网站,例如新浪微波,豆瓣等UGC网站,都是需要登录的。没有这个HttpPostAuthentication,Nutch其实只能抓取不需要登录的网页,适用范围大打折扣,现在是web 2.0时代,真正优质的内容,几乎都是需要登录的。
  2. 多个代理的管理。Nutch 没有提供多个代理的管理功能,只能在nutch-site.xml里配置一个代理。比如我在网上抓取了几百个免费的http代理,怎么让Nutch的各个线程均匀的使用这些代理,平能自动判断代理的速度,优先选择速度高的代理呢?