Nutch 问题杂记
1. 如何绕过目标站点的robots.txt限制
多数站点都是只允许百度、google等搜索引擎抓取的,所以会在robots.txt里限制其他爬虫。
nutch自然是会遵循robots协议的,但是我们可以通过修改nutch源码来绕过限制。
相关代码位于(nutch版本1.5.1,其他版本未测试):
org.apache.nutch.fetcher.Fetcher的run方法.
找到以下几行代码并注释掉就OK了。
- if (!rules.isAllowed(fit.u)) {
- // unblock
- fetchQueues.finishFetchItem(fit, true);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Denied by robots.txt: " + fit.url);
- }
- output(fit.url, fit.datum, null, ProtocolStatus.STATUS_ROBOTS_DENIED, CrawlDatum.STATUS_FETCH_GONE);
- reporter.incrCounter("FetcherStatus", "robots_denied", 1);
- continue;
- }
2. url掉转导致html parse不成功的问题
在抓取百度百科的景点数据时,发现部分页面不会走html parse部分的逻辑,而我的plugin是基于HtmlParserFilter扩展点的,因而没有生效。
后来发现请求部分页面的链接返回的http状态为301,跳转之后才会到真正页面,而nutch默认是不会抓取跳转后的页面的.这时需要修改
nutch-site.xml,加入以下配置即可,nutch-default.xml里的默认值是0,我们这里改成一个大于0的值,nutch就会继续
抓取跳转后的页面了。
- <property>
- <name>http.redirect.max</name>
- <value>2</value>
- <description>The maximum number of redirects the fetcher will follow when
- trying to fetch a page. If set to negative or 0, fetcher won't immediately
- follow redirected URLs, instead it will record them for later fetching.
- </description>
- </property>
3. 抽取的过程中发现某些属性老是抽不到,而在不使用nutch抓取的情况下是能抽到的,进而怀疑nutch抓取的页面不全。于是去google了一下"nutch content limit",发现nutch有这么一个配置项:
- <property>
- <name>http.content.limit</name>
- <value>65536</value>
- <description>The length limit for downloaded content using the http://
- protocol, in bytes. If this value is nonnegative (>=0), content longer
- than it will be truncated; otherwise, no truncation at all. Do not
- confuse this setting with the file.content.limit setting.
- </description>
- </property>
用来限制抓取内容的大小,放大10倍后,问题解决。
需要注意的是nutch还有一个很容易混淆的配置项:
- <property>
- <name>file.content.limit</name>
- <value>65536</value>
- <description>The length limit for downloaded content using the file://
- protocol, in bytes. If this value is nonnegative (>=0), content longer
- than it will be truncated; otherwise, no truncation at all. Do not
- confuse this setting with the http.content.limit setting.
- </description>
- </property>
两个配置用于的协议不同,前者是http协议,后者是file协议,我一开始就配置错了,折腾了半天。。。
PS:最后推荐两篇介绍nutch的文章,在官方文档不那么给力的情况下,这两篇文章给了我不小的帮助,感谢下作者。
http://www.atlantbh.com/apache-nutch-overview/ 对nutch的整体流程做了介绍
http://www.atlantbh.com/precise-data-extraction-with-apache-nutch/ 用实际例子介绍了nutch plugin的开发和部署
Nutch 问题杂记的更多相关文章
- [Erlang 0118] Erlang 杂记 V
我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下. 做笔记 一开始笔记软件做的不好的时候就发邮件给自己, ...
- Nutch搜索引擎(第1期)_ Nutch简介及安装
1.Nutch简介 Nutch是一个由Java实现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其进行分析,建立索引,以提供相应的接口来对其网页数据进行查询的一 ...
- Ubuntu杂记——Ubuntu下用虚拟机共享上网
由于最近把自己电脑环境换成了Ubuntu,但学校的网络是电信的闪讯,大学里用过的人都知道这货有多坑,而且没有Linux客户端,上网都是问题,怪不得国内用Linux的人那么少,特别是高校的学生(让我瞎逼 ...
- 一个ubuntu phper的自我修养(杂记)
ubuntu使用杂记 1.flatabulous安装使用. flatabulous是一个ubuntu图标主题. 使用它,必须得安装tweak插件. sudo add-apt-repository pp ...
- Nutch插件原理
本文目的:讲解Nutch的插件运行时加载原理
- Apache Nutch build文件解析
本文目的:分析Apache Nutch 1.9的build.xml文件,从而让读者了解nutch的build全部流程
- Nutch主要类代码分析之一(Injector)
Injector(org.apache.nutch.crawl.Injector): 输入:种子列表文件所在的目录 输出:crawldb(保存URL以及其相应信息的数据库) 作用:把种子URL注入到c ...
- 读取nutch爬取内容方法
读取nutch内容有如下两种方法: 1 通过Nutch api SegmentReader读取. public Content readSegment(String segPath,String ur ...
- Nutch源码阅读进程5---updatedb
看nutch的源码仿佛就是一场谍战片,而构成这精彩绝伦的谍战剧情的就是nutch的每一个从inject->generate->fetch->parse->update的环节,首 ...
随机推荐
- Charles 3断点篡改数据
只是临时修改一次网络请求结果,使用重写过于麻烦.对于临时性的修改,最好使用断点. 断点功能主要修改requess和response内容,这个时候接口是在Charles代理层被拦截,还未到手机设备上. ...
- java DecimalFormat类
今天去面试了,需要上机做题.题目的内容是计算一个货物订单的税费和总价格(包括税费),结果需要精确到两个小数,同时按照如下规则进行处理: 3.01 ——>3.05, 2.48——> ...
- Solr -- 查询语法/参数
1. 常用查询参数 参数 描述 defType 指定用于处理查询语句(参数q的内容)的查询解析器,eg:defType=lucene sort 指定响应的排序方式:升序asc或降序desc.同时需要指 ...
- 按键精灵对VBS的支持
VBSBegin…VBSEnd(VBS块)格式:VBSBegin...VBSEnd用途:可以在VBS块的区域内随意的书写VBS语法指令. 更多说明:由于彻底的转向VBS语言,会导致goto语句不能被兼 ...
- Direcshow相关资料
CCapture directshow 视频捕获类: http://blog.csdn.net/xgx198831/article/details/7284618 ICaptureGraphBuild ...
- 使用libcurl显示下载进度
使用libcurl显示下载进度 http://blog.csdn.net/zhouzhenhe2008/article/details/53876622
- JAVA_03
在Java中,理解JDK.JRE.JVM三者的区别是十分重要的; JDK JDK是Java Development Kit(Java开发工具包)的缩写,包含JRE和其他开发工具. JRE JRE是Ja ...
- ubuntu 安装google输入法
第五步:通常情况下,IBus图标(一个小键盘)会出现在桌面右上角的任务栏中.有时候这个图标会自行消失,可使用以下命令,找回消失的IBus图标: ibus-daemon -drx 不建议用googl ...
- 在eclipse中使用maven
现在一般的eclipse工具中都自带的有maven插件,我们使用自带的即可,但需要修改二个参数 具体设置为: 1.设置Installations 2.设置user settings
- ajax传参里含有特殊字符的坑
问题场景:今天在测试自己手上的页面功能时,发现一个小bug,在用ajax向后台发数据时,只要参数中出现一些特殊字符,控制台会报错http 400的问题,其实就是特殊字符服务器不能解析.好了,问题是找到 ...