
2014-08-22 by 轻狂.书生
题记:一步一坑,且行且珍惜
最近接到任务,要利用nutch去抓取公司内部系统的文章,可是需要登录才能抓到。对于一个做.net,不熟悉java,不知道hadoop,很少接触linux的我,这个过是艰难且痛苦的,盲人摸象搬的折腾出来了,但是我对hadoop还是没了解。这个东西在网上真的很难查到,我也是自己试验,网上零碎的片段拼起来的。nutch使用有些在网上可以随便找打的,我就不详细说明了,我只说明网上不好查到的内容。
本文是在假设你已经会简单使用nutch的条件下写的,如果需要基础配置,网上还是有较多的。
环境和软件(linux+ant+nutch)
step1:nutch 不支持表单登录,这个必须要对其进行二次开发。可是怎么编译是个很大的问题。我在网上看到别人写的windows+eclipse+cygwin,我自己配置了半天,但是还是没搞出来,算了,还是用linux吧,谁叫nutch就是用linux,hadoop的呢。
step2:去官网下载nutch-1.6-src,注意不是bin了,因为我们是要改代码的。现在nutch-2.1也出来了,但是我来之前就是用的1.6,没办法,接着做吧。
step3: 去官网下载ant,找个最新版本下载就可以了。这个是用来编译nutch的。我的版本是apache-ant-1.9.4-bin.tar.gz,但是ant版本并无太大影响。
step4:为ant配置环境变量,这个方法在网上有很多讲解,不细说了。nutch使用
二次开发nutch
怎么进行开发呢?由于我用eclipse没有让nutch跑起来,也不会编译,所以我采用最原始的办法,去改单个java文件,用ant去编译。
step1:怎么实现登录
用了一个简单粗暴的办法,在每次进行http请求时检查cookie jar 里面存不存在cookie,不存在就读取nutch.site.xml里面我们配置的登录链接,然后把cookie存进去,不管你抓取哪个网页,不管你用没用到,反正cookie就在了。

参考地址:https://issues.apache.org/jira/browse/NUTCH-827
step2:补丁下载地址
http-client-form-authtication.patch 网盘下载地址:
nutch-http-cookies.patch 网盘下载地址:
step3:补丁使用方法
拿到补丁文件,感到欣喜万分,可是怎么用啊,完全不会啊。我把补丁文件研究了一下,发现了规律。除了httpBase在lib-http这个插件里面,我们其他的protocol-httpclient里面,按照补丁里面的++就是添加,--就是删除,根据上下文推出位置,新增代码或者新增类即可。注意每个版本代码已经有变化,但是找到自己决定合适的地方,总可以找到的。我用最原始的的办法,手动去修改了httpBase类和http类,按照补丁新增了几个类,这一步一定要细心,别copy错了。
+++ src/plugin/lib-http/src/java/org/apache/nutch/protocol/http/api/HttpBase.java (working copy)+++ src/plugin/protocol-httpclient/src/java/org/apache/nutch/protocol/httpclient/Http.java (working copy)
step4:怎么配置登录页面的地址
在nutch-site.xml里面添加登录信息即可,注意虽然上面的文章,补丁上都是nutch-default.xml,但是根据nutch xml顺序,加在nutch-site.xml即可.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49658-1.html
武官不怕死
有利益就有冲突