题记:一步一坑,且行且珍惜

  最近接到任务,要利用nutch去抓取公司内部系统的文章,可是需要登录才能抓到。对于一个做.net,不熟悉java,不知道hadoop,很少接触linux的我,这个过程真是艰难且痛苦的,盲人摸象搬的折腾出来了,但是我对hadoop还是没了解。这个东西在网上真的很难查到,我也是自己试验,网上零碎的片段拼起来的。有些在网上可以随便找打的,我就不详细说明了,我只说明网上不好查到的内容。

  本文是在假设你已经会简单使用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

  怎么进行开发呢?由于我用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  网盘下载地址:http://pan.baidu.com/s/1sjuek0l

nutch-http-cookies.patch      网盘下载地址:http://pan.baidu.com/s/1pJ3BDO3

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即可.

找到登录页面表单里的用户名,密码等,模拟登录。

注意:xml存在转义 不能直接写& 要用&来代替

 <property>
<name>http.cookie.login.page</name>
<value>www.xxx.com/login?id=xxx&amp;pas=xxx</value>
<description>URL of the login page to derive the cookies from. Cookies
will be stored upon initialization and re-initialized upon expiration.
Any URL request attributes will be sent to POSTed to the page.
NOTE: This currently only works for protocol-httpclient.</description>
</property>

ant 编译nutch

在nutch-1.6目录下运行 ant就可以直接进行编译,但是有一些问题需要注意。

问题一:jsoup.jar不存在

  由于我们修改的文件用引入了这个包,所以我们需要在工程中引入这个包,要修改ivysetting.xml和plugin.xml,具体方法谷歌(add third part dependency to you nutch plugin),我的搜索不了,以后再更新。

问题二:运行到此处没反应的,需要等待几分钟

resolve-default:
[ivy:resolve] :: Ivy 2.2. - :: http://ant.apache.org/ivy/ ::
[ivy:resolve] :: loading settings :: file = /home/shaozt/softIns/CrawSource/apache-nutch-2.1/ivy/ivysettings.xml

问题三:connection time out 

  此问题的原因是http://repo1.maven.org/maven2/不存在,解决方案是寻找能使用的资源库URL。经过测试http://mirrors.ibiblio.org/maven2/在浏览器下可以正常访问,用此URL替换\ivy目录下ivysettings.xml中的http://repo1.maven.org/maven2/,可以正常下载所依赖的jar包,编译成功。

问题四:是否需要代理

  如果你使用的是代理,而问题三改后任然timeout ,需要为ant配置代理,格式如下。网上的什么set感觉没有用。

export ANT_OPTS="-Dhttp.proxyHost=XXX -Dhttp.proxyPort=XX"

//如果需要用户名和密码,需要后面添加
export ANT_OPTS="-Dhttp.proxyHost=代理服务器地址 -Dhttp.proxyPort=代理服务器端口 -Dhttp.proxyUserName=用户名 -Dhttp.proxyPassword=密码"

nutch使用注意:二次开发的是protocol-httpclient,在nutch-site.xml 把protocol-http 插件换成protocol-httpclient

最重要的几点我都已经说明了,我相信会对需要的人有很大的帮助。不过这个插件二次开发还是不太完善,补丁包里面也有很多不用的代码,但是至少功能实现了。后面还面临更大的挑战,主页可不可以不要全部用js生成,还让人怎么活啊!

(原创)博客园 轻狂书生http://www.cnblogs.com/xiaoshuai1992/p/nutchlogin.html,转载请注明出处!

nutch 抓取需要登录的网页的更多相关文章

  1. Nutch抓取流程

    nutch抓取流程注入起始url(inject).生成爬取列表(generate).爬取(fetch).解析网页内容(parse).更新url数据库(updatedb)1:注入起始url(inject ...

  2. Fiddler: 如何抓取HTTPS协议的网页

    作者:韦玮  转载请注明出处 Fiddler默认只能抓取HTTP协议的网页,不能抓取HTTPS协议的网页,而我们很多时候,都需要抓HTTPS协议的网页,比如抓淘宝数据等.今天,韦玮老师会为大家讲解如何 ...

  3. Fiddler如何抓取HTTPS协议的网页

    Fiddler默认只能抓取HTTP协议的网页,不能抓取HTTPS协议的网页,而我们很多时候,都需要抓HTTPS协议的网页,比如抓淘宝数据等.今天,韦玮老师会为大家讲解如何使用Fiddler抓取HTTP ...

  4. 如何让Python爬虫一天抓取100万张网页

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 源自:猿人学Python PS:如有需要Python学习资料的 ...

  5. java抓取动态生成的网页

    最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架 ...

  6. C# asp.net 抓取需要登录的网页内容 抓取asp.net登录验证的网站

    private void btnASPNET_Click(object sender, EventArgs e)        {            Dictionary<string, s ...

  7. 网页抓取:PHP实现网页爬虫方式小结

    来源:http://www.ido321.com/1158.html 抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程有点繁琐.LZ总结了几种常用的.易于实现 ...

  8. python3下scrapy爬虫(第二卷:初步抓取网页内容之直接抓取网页)

    上一卷中介绍了安装过程,现在我们开始使用这个神奇的框架 跟很多博主一样我也先选择一个非常好爬取的网站作为最初案例,那么我先用屌丝必备网站http://www.shaimn.com/xinggan/作为 ...

  9. [转]抓取当前登录用户登录密码的工具:mimipenguin

    Github项目地址 前有Mimikatz,今有mimipenguin,近日国外安全研究员huntergregal发布了工具mimipenguin,一款Linux下的密码抓取神器,可以说弥补了Linu ...

随机推荐

  1. Basic Data Structure HDU - 5929 (这个模拟我要报警了)

    Mr. Frog learned a basic data structure recently, which is called stack.There are some basic operati ...

  2. POJ 2429 long long 质因数分解

    GCD & LCM Inverse Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16206   Accepted: ...

  3. HDU2833 最短路 floyd

    WuKong Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. Hadoop Yarn事件处理框架源码分析

    由于想在项目中使用类似yarn的事件处理机制,就看了实现.主要是由Dispatcher.java,EventHandler.java,Service.java这3个类撑起来的. 在事件处理之前,先注册 ...

  5. Web Api Action的筛选

    web Api设置默认路由设置: 这种目标Action方法的选择有以下几轮: 1.针对 HTTP方法 进行筛选 2.针对参数类型,可以做参数约束 3.针对参数数量 另一种路由“api/{control ...

  6. .NET类型转型的四种做法(转)

    .NET类型转型的四种做法: ◆ 强制转型:(int)变量名称 ◆ int.Parse(字符串变量名称) ◆ Convert.To类型(变量名称) ◆ TryParse 强制转型 (casting) ...

  7. sql生成一个日期表

    SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Auth ...

  8. [Luogu 3178] HAOI2013 树上操作

    [Luogu 3178] HAOI2013 树上操作 一道比模板还简单的难以置信的裸HLD省选题. 大约是需要long long. #include <cstdio> #include & ...

  9. 解决配置JAVA_HOME JDK版本不变的问题

    解决方案:修改环境变量Path 因为PATH环境变量中默认将system32等系统重要目录添加在最前面,所以运行java -version时当然是调用system32目录下的java.exe了. 所以 ...

  10. Android使用TextView实现跑马灯效果(自定义控件)

    对于一个长的TetxView 折行显示是一个很好的办法,另一种方法就是跑马灯显示(单行滚动) 1.折行显示的长TextView <LinearLayout xmlns:android=" ...