zoukankan      html  css  js  c++  java
  • nutch 抓取需要登录的网页

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

      最近接到任务,要利用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.0 - 20100923230623 :: 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,转载请注明出处!

  • 相关阅读:
    mysql授权指定ip远程登录
    FinalShell Mac OS版,Linux版安装及教程(Mac下的xshell)
    Mac下搭建Vue开发环境
    卸载阿里云盾(安骑士)监控&屏蔽云盾IP
    Deep Learning 学习笔记(8):自编码器( Autoencoders )
    Deep Learning 学习笔记(7):神经网络的求解 与 反向传播算法(Back Propagation)
    Deep Learning 学习笔记(6):神经网络( Neural Network )
    Deep Learning 学习笔记(5):Regularization 规则化
    Deep Learning 学习笔记(4):Logistic Regression 逻辑回归
    Deep Learning 学习笔记(3):Linear Regression 数据的预处理
  • 原文地址:https://www.cnblogs.com/xiaoshuai1992/p/nutchlogin.html
Copyright © 2011-2022 走看看