报错信息:fetch of http://szs.mof.gov.cn/zhengwuxinxi/zhengcefabu/201402/t20140224_1046354.html failed with: java.io.IOException: unzipBestEffort returned null
完整的报错信息为:
2014-03-12 16:48:38,031 ERROR http.Http - Failed to get protocol output java.io.IOException: unzipBestEffort returned null at org.apache.nutch.protocol.http.api.HttpBase.processGzipEncoded(HttpBase.java:317) at org.apache.nutch.protocol.http.HttpResponse.<init>(HttpResponse.java:164) at org.apache.nutch.protocol.http.Http.getResponse(Http.java:64) at org.apache.nutch.protocol.http.api.HttpBase.getProtocolOutput(HttpBase.java:140) at org.apache.nutch.fetcher.Fetcher$FetcherThread.run(Fetcher.java:703) 2014-03-12 16:48:38,031 INFO fetcher.Fetcher - fetch of http://szs.mof.gov.cn/zhengwuxinxi/zhengcefabu/201402/t20140224_1046354.html failed with: java.io.IOException: unzipBestEffort returned null 2014-03-12 16:48:38,031 INFO fetcher.Fetcher - -finishing thread FetcherThread, activeThreads=0
由此可知抛出异常的代码位于src/plugin/lib-http/src/java/org/apache/nutch/protocol/http/api/HttpBase.java(lib-http插件)类的processGzipEncoded方法的317行:
byte[] content; if (getMaxContent() >= 0) { content = GZIPUtils.unzipBestEffort(compressed, getMaxContent()); } else { content = GZIPUtils.unzipBestEffort(compressed); } if (content == null) throw new IOException("unzipBestEffort returned null");
nutch1.7\src\plugin\protocol-http\src\java\org\apache\nutch\protocol\http\HttpResponse.java(protocol-http插件)的164行调用了processGzipEncoded方法:
readPlainContent(in); String contentEncoding = getHeader(Response.CONTENT_ENCODING); if ("gzip".equals(contentEncoding) || "x-gzip".equals(contentEncoding)) { content = http.processGzipEncoded(content, url); } else if ("deflate".equals(contentEncoding)) { content = http.processDeflateEncoded(content, url); } else { if (Http.LOG.isTraceEnabled()) { Http.LOG.trace("fetched " + content.length + " bytes from " + url); } }
通过Firefox的Firebug工具可查看该URL的响应头为Content-Encoding:gzip,Transfer-Encoding:chunked。
解决方法如下:
1、修改文件nutch1.7\src\java\org\apache\nutch\metadata\HttpHeaders.java,增加一个field:
public final static String TRANSFER_ENCODING = "Transfer-Encoding";
2、修改文件nutch1.7\src\plugin\protocol-http\src\java\org\apache\nutch\protocol\http\HttpResponse.java,替换第160行代码readPlainContent(in);为如下代码
String transferEncoding = getHeader(Response.TRANSFER_ENCODING); if(transferEncoding != null && "chunked".equalsIgnoreCase(transferEncoding.trim())){ readChunkedContent(in, line); }else{ readPlainContent(in); }
3、http内容长度限制不能使用负值,只能使用一个大整数:
<property> <name>http.content.limit</name> <value>655360000</value> </property>
4、因为修改了核心代码和插件代码,所以需要重新编译打包发布,执行nutch1.7\build.xml的默认target:runtime
cd nutch1.7 ant
提交BUG:
1、https://issues.apache.org/jira/browse/NUTCH-1736
2、https://github.com/apache/nutch/pull/3
相关推荐
为达成这一目标,Nutch需要能够每月爬取数十亿网页,维护索引,执行每秒上千次的搜索请求,并提供高质量的搜索结果,同时还要保证最低的运行成本。 与Lucene的区别:简单来说,Lucene是一个用于实现全文检索的软件...
然后,他们可以运行Nutch的命令行工具进行网页抓取、索引创建以及查询操作。 总的来说,这个Nutch1.0修改版体现了开源社区的力量,通过协作和共享,解决了特定语言环境下(如中文)的问题,提升了工具的适用性和...
提供的压缩文件"CN-TR-04-04.pdf"可能包含了关于Nutch项目的详细技术文档或教程,它可能涵盖了Nutch的安装、配置、运行示例以及常见问题解答等内容。通过阅读这份文档,你可以更深入地了解如何使用Nutch,以及在实际...
要使用众包模式运行搜寻器: 确保您熟悉Apache Nutch 修改nutch-site.xml,将“ fetcher.fetch.mode”设置为“ crowdsourcing”,将“ nutch.master.domain”设置为运行nutch服务器的机器在任何机器上启动卫星都...
在提供的文件中,"提高nutch运行效率的优化方法1.png"和"提高nutch运行效率的优化方法2.png"可能是展示具体优化步骤的图表,而"提高nutch运行效率的原理.png"则可能解释了Nutch运行的基本原理,这些图像可以帮助读者...
3. **运行Nutch**:执行Nutch的命令行工具,如`bin/nutch crawl`,启动爬虫流程。 4. **搜索关键词**:Nutch完成索引后,可以通过HTTP接口或API,使用IndexSearcher搜索含有特定关键词的文档。 四、实际应用示例 ...
解压后,通过命令行进入Nutch目录并运行`ant`,等待构建完成。 6. **导入Eclipse项目**: 在Eclipse中新建一个Java项目,将Nutch解压后的conf目录添加到项目的构建路径中。设置默认输出文件夹为Nutch/conf。 7. *...
这个“nutch-windows-script”项目提供了一套专为Windows环境设计的脚本,使得在Windows上运行Nutch 2.1变得更加方便。在Windows操作系统中,由于默认不支持Bash shell,因此通常需要额外的配置来执行基于Unix/Linux...
《Nutch入门经典翻译1:Introduction to Nutch, Part 1: Crawling》一文深入介绍了Nutch这一开源网络爬虫框架的基本概念、体系结构及其关键组件,为初学者提供了全面的理解视角。以下是对该文章核心知识点的详细解读...
搭建Nutch框架涉及到多个步骤,首先需要确保服务器环境符合Nutch的运行要求,通常推荐使用Linux操作系统。具体步骤如下: 1. **环境准备**:安装Java运行环境,因为Nutch是基于Java开发的,Java版本应符合Nutch的...
在本文中,我们将深入探讨如何搭建Nutch2.3.1的运行环境,以便进行网页抓取和分析。 **一、系统需求** 首先,确保你的系统满足以下基本要求: 1. 操作系统:Nutch可以在Linux、Unix或Mac OS X等类Unix系统上运行,...
Nutch程序运行环境配置是Java开发中的一个重要环节,特别是在Windows操作系统上进行Nutch相关的开发工作。Nutch是一个开源的Web爬虫项目,用于抓取互联网上的网页并建立索引,通常与Hadoop等大数据处理框架结合使用...
Nutch 实战:http://www.ibm.com/developerworks/cn/opensource/os-cn-nutchintro/ Nutch还需要另外两个jar文件,jid3lib-0.5.1.jar和rtf-parser.jar
Cygwin是一个在Windows上模拟Linux环境的开源软件,它提供了许多在Linux环境下才能运行的命令行工具,使得我们能够在Windows系统上执行类似Linux的操作,这对于需要在Windows系统中运行Nutch这样的基于Unix/Linux的...
为了使Nutch在Eclipse中正常运行,你需要修改Nutch的默认配置文件`nutch-default.xml`。具体而言,将`plugin.folders`参数改为`"./src/plugin"`,以确保Nutch能够识别到项目的插件目录。 #### 步骤5:设置URL文件 ...
在这个"apache-nutch-1.4-bin.tar.gz"压缩包中,包含了运行 Nutch 的所有必要组件和配置文件,适合初学者和开发者快速部署和实验。 **Nutch 的核心组成部分:** 1. **爬虫(Spider)**:Nutch 的爬虫负责在网络中...
自Nutch 0.8.0版本起,它完全运行在Hadoop平台上,这使Nutch能够利用Hadoop的分布式文件系统(HDFS)以及MapReduce编程模型来实现大规模数据处理能力。Hadoop不仅提供了分布式文件存储功能,还实现了Google的...
因为 Nutch 原生设计在 Linux 环境下运行,所以在 Windows 上配置 Nutch 需要一些额外的步骤。主要有两种方法: - **在 Eclipse 中使用 Nutch**: - 创建一个新的 Java 项目。 - 导入 Nutch 源码,将 `src\java`...
5. **启动爬虫**:运行Nutch的`bin/nutch`脚本,执行如`crawl`命令开始爬取过程。 6. **监控和调试**:观察日志文件,跟踪爬虫的运行状态,如有需要,进行问题排查和性能优化。 通过学习和研究Nutch源码,开发者...