Nutch爬虫爬取某网页是出现下列异常:
ERROR http.Http (?:invoke0(?)) - java.io.IOException: unzipBestEffort returned null
ERROR http.Http (?:invoke0(?)) - at org.apache.nutch.protocol.http.api.HttpBase.processGzipEncoded(HttpBase.java:472)
ERROR http.Http (?:invoke0(?)) - at org.apache.nutch.protocol.http.HttpResponse.<init>(HttpResponse.java:151)
ERROR http.Http (?:invoke0(?)) - at org.apache.nutch.protocol.http.Http.getResponse(Http.java:63)
ERROR http.Http (?:invoke0(?)) - at org.apache.nutch.protocol.http.api.HttpBase.getProtocolOutput(HttpBase.java:208)
ERROR http.Http (?:invoke0(?)) - at org.apache.nutch.fetcher.Fetcher$FetcherThread.run(Fetcher.java:173)
经过调试发现异常来源于:
java.io.IOException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:137)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:68)
该异常原因:
此页面采用这个是一个分段传输,而nutch爬虫则默认采用了非分段式处理,导致构造GZIP时出错,从而影响了后面的GZIP解压失败。
是否是分段传输可以在Http headers里面看到,如果是分段传输则有:transfer-encoding:chunked这样一个响应。
处理方法:
1. 修改接口org.apache.nutch.metadata.HttpHeaders, 添加:
public final static String TRANSFER_ENCODING = "Transfer-Encoding";
2. 在nutch中的org.apache.nutch.protocol.http.HttpResponse类中已经提供了分段传输类型的处理方法:
private void readChunkedContent(PushbackInputStream in,
StringBuffer line)
我们只需要在HttpResponse的构造方法总调用该方法即可,添加如下代码:
String transferEncoding = getHeader(Response.TRANSFER_ENCODING);
if(transferEncoding != null && transferEncoding.equalsIgnoreCase("chunked")){
StringBuffer line = new StringBuffer();
this.readChunkedContent(in, line);
}else{
readPlainContent(in);
}
修改完成,运行测试。
刚才不能爬取的站点终于可以爬取了
分享到:
相关推荐
nutcher 是 Apache Nutch 的中文教程,在github上托管。nutch社区目前缺少教程和文档,而且教程对应版本号较为落后。nutcher致力于为nutch提供一个较新的中文教程和文档,供开发者学习。 github地址: ...
nutch应用,nutch中文分词,nutch中文乱码
Nutch中文分词插件的编写与配置,由于Internet的迅猛发展,使得用户查找信息犹如大海捞针,而搜索引擎则能帮用户很好的解决这个问题。 Nutch是用java语言开发的,基于Lucene的完整的网络搜索引擎,并采用插件机制进行...
为了实现这些目标,Nutch使用了像MapReduce这样的分布式处理模型,以及它自己的分布式文件系统,使得它能够在多台机器上协同工作,进行大规模数据处理。 安装和配置Nutch涉及到了对JDK、Nutch本身的安装与配置以及...
Hadoop 提供了分布式计算框架,使得 Nutch 能够处理海量的网页数据。Nutch 利用 Hadoop MapReduce 进行分布式任务执行,同时,HBase 通常用于存储 Nutch 的索引数据,提供实时查询功能。 **Nutch 的使用** 学习 ...
通过上述步骤,你可以在Eclipse中成功配置并运行Nutch,从而利用其强大的网络爬取和数据处理能力。这不仅为学习和研究Nutch提供了便利,也为实际应用中的数据采集和分析打下了坚实的基础。记住,配置过程中遇到任何...
作为舆情监测系统的一部分,本文的目标是基于Nutch,同时,结合目前最常用中文分词技术,根据不同的中文分词方法,实验并得出不同分词方法在性能以及使用环境上的优缺点,以此为舆情监测系统选择合适的中文分词方法...
Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。 目 录 1. nutch简介...1 1.1什么是nutch..1 1.2研究nutch的原因...1 1.3 nutch的目标..1 1.4 nutch VS lucene.....2 2....
经过一系列实验验证,本文提出的中文搜索技术方案显著提高了Nutch搜索引擎对于中文信息的处理能力。具体体现在以下几个方面: - **搜索精度**:采用新的分词技术和语法分析方法后,搜索结果的相关性得到了明显提升。...
5. **Nutch源码结构**:压缩包中的"src"目录很可能包含了Nutch的源代码,这包括了各种模块,如爬虫模块(fetcher)、解析模块(parser)、索引模块(indexer)等。开发者可以通过阅读源码理解其内部机制,并进行二次...
Nutch最初由Doug Cutting创建,后来成为了Hadoop项目的一部分,因为其在大数据处理和分布式计算方面的重要性。这个版本的源码包含了实现Web抓取、索引和搜索功能的全部Java代码,为开发者提供了深入理解搜索引擎工作...
在Nutch这个开源的全文搜索引擎项目中,"nutch缺失的两个jar组件"是指系统运行或构建过程中缺少的两个关键库文件,它们分别是处理RTF(Rich Text Format)和MP3格式的库。Nutch是一个广泛使用的Web爬虫,它能够抓取...
在Java编程环境中,获取Nutch中的网页详细信息是一项常见的任务,尤其对于那些处理大量网络数据的项目来说。Nutch是一个开源的Web爬虫框架,它能够抓取互联网上的网页并进行索引,非常适合用于大数据分析和搜索引擎...
2. **引入依赖库**:将Nutch运行环境下的lib目录中的JAR包引入到项目中。这些库包含了Nutch的核心功能和API,是开发插件所必需的基础。 3. **实现扩展点接口**:创建一个类来实现所需的扩展点接口。例如,可以创建...
2. **修改HTML解析器配置**:在Nutch的conf/nutch-site.xml中,设置jsoup.parse-body-text和jsoup.charset属性,确保解析器能够正确识别和处理HTML中的编码声明。 3. **设置存储编码**:检查Nutch的HDFS和数据库...
Nutch的工作流程包括多个步骤,如生成段(Segments)、迭代抓取(Fetch)、解析(Parse)、更新链接数据库(Update)、生成新的种子(Generate)、选择待抓取页面(Select)、重定向处理(Fetch)以及索引(Index)...
在Nutch 1.2中集成IKAnalyzer,需要修改NutchAnalysis.jj文件,将SIGRAM规则调整为支持连续的汉字,然后在代码中初始化IKTokenizer,使其能够处理输入的文本流。通过这种方式,Nutch现在能够对抓取的网页内容进行...