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

  最近接到任务,要利用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. P2075 [NOIP2012T5]借教室 区间更新+二分查找

    P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院 ...

  2. HDU1358 KMP(最短循环节)

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

  3. git 回退

    回退命令: $ git reset --hard HEAD^ 回退到上个版本$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前 $ git rese ...

  4. jsoup select 选择器

    转载自:http://blog.csdn.net/zhejingyuan/article/details/11801027 方法 利用方法:Element.select(String selector ...

  5. #应用openxml读写excel代码

    这个例子比较简单,没有考虑格式之类的问题. using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadshe ...

  6. LightOJ 1306 - Solutions to an Equation 裸EXGCD

    本题是极其裸的EXGCD AX+BY+C=0 给你a b c 和x与y的区间范围,问你整数解有几组 作为EXGCD入门,题目比较简单 主要需要考虑区间范围的向上.向下取整,及正负符号的问题 问题是这正 ...

  7. [洛谷P2375] [NOI2014]动物园

    洛谷题目链接:[NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决 ...

  8. flask 自定义url转换器

    from werkzeug.routing import BaseConverter app = Flask(__name__) class TeleConveter(BaseConverter): ...

  9. 【转】IOS版本自定义字体步骤

    本文转载自:http://quick.cocoachina.com/wiki/doku.php?id=ios%E7%89%88%E6%9C%AC%E4%BD%BF%E7%94%A8%E8%87%AA% ...

  10. VSCode Web Developement for Javascript. Must have plugins.

    Es6 Javascript front-end web developemnt must have plugins Prettier - Code Formatter Javascript (ES6 ...