`
xkd321
  • 浏览: 9809 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

NUTCH中的not in gzip format异常处理

阅读更多

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);
        }

 

修改完成,运行测试。

刚才不能爬取的站点终于可以爬取了

分享到:
评论

相关推荐

    Nutch中文教程nutcher.zip

    nutcher 是 Apache Nutch 的中文教程,在github上托管。nutch社区目前缺少教程和文档,而且教程对应版本号较为落后。nutcher致力于为nutch提供一个较新的中文教程和文档,供开发者学习。 github地址: ...

    nutch中文分词

    nutch应用,nutch中文分词,nutch中文乱码

    Nutch中文分词插件的编写与配置

    Nutch中文分词插件的编写与配置,由于Internet的迅猛发展,使得用户查找信息犹如大海捞针,而搜索引擎则能帮用户很好的解决这个问题。 Nutch是用java语言开发的,基于Lucene的完整的网络搜索引擎,并采用插件机制进行...

    Nutch入门教程.pdf

    为了实现这些目标,Nutch使用了像MapReduce这样的分布式处理模型,以及它自己的分布式文件系统,使得它能够在多台机器上协同工作,进行大规模数据处理。 安装和配置Nutch涉及到了对JDK、Nutch本身的安装与配置以及...

    nutch

    Hadoop 提供了分布式计算框架,使得 Nutch 能够处理海量的网页数据。Nutch 利用 Hadoop MapReduce 进行分布式任务执行,同时,HBase 通常用于存储 Nutch 的索引数据,提供实时查询功能。 **Nutch 的使用** 学习 ...

    eclipse配置nutch,eclipse配置nutch

    通过上述步骤,你可以在Eclipse中成功配置并运行Nutch,从而利用其强大的网络爬取和数据处理能力。这不仅为学习和研究Nutch提供了便利,也为实际应用中的数据采集和分析打下了坚实的基础。记住,配置过程中遇到任何...

    基于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....

    基于Java的搜索引擎Nutch中文搜索技术研究

    经过一系列实验验证,本文提出的中文搜索技术方案显著提高了Nutch搜索引擎对于中文信息的处理能力。具体体现在以下几个方面: - **搜索精度**:采用新的分词技术和语法分析方法后,搜索结果的相关性得到了明显提升。...

    nutch开发资料 搜索引擎

    5. **Nutch源码结构**:压缩包中的"src"目录很可能包含了Nutch的源代码,这包括了各种模块,如爬虫模块(fetcher)、解析模块(parser)、索引模块(indexer)等。开发者可以通过阅读源码理解其内部机制,并进行二次...

    nutch-1.5.1源码

    Nutch最初由Doug Cutting创建,后来成为了Hadoop项目的一部分,因为其在大数据处理和分布式计算方面的重要性。这个版本的源码包含了实现Web抓取、索引和搜索功能的全部Java代码,为开发者提供了深入理解搜索引擎工作...

    nutch缺失的两个jar组件

    在Nutch这个开源的全文搜索引擎项目中,"nutch缺失的两个jar组件"是指系统运行或构建过程中缺少的两个关键库文件,它们分别是处理RTF(Rich Text Format)和MP3格式的库。Nutch是一个广泛使用的Web爬虫,它能够抓取...

    如何通过java程序获得Nutch中网页的详细信息

    在Java编程环境中,获取Nutch中的网页详细信息是一项常见的任务,尤其对于那些处理大量网络数据的项目来说。Nutch是一个开源的Web爬虫框架,它能够抓取互联网上的网页并进行索引,非常适合用于大数据分析和搜索引擎...

    Nutch插件开发文档

    2. **引入依赖库**:将Nutch运行环境下的lib目录中的JAR包引入到项目中。这些库包含了Nutch的核心功能和API,是开发插件所必需的基础。 3. **实现扩展点接口**:创建一个类来实现所需的扩展点接口。例如,可以创建...

    nutch乱码BUG修正

    2. **修改HTML解析器配置**:在Nutch的conf/nutch-site.xml中,设置jsoup.parse-body-text和jsoup.charset属性,确保解析器能够正确识别和处理HTML中的编码声明。 3. **设置存储编码**:检查Nutch的HDFS和数据库...

    nutch使用&Nutch;入门教程

    Nutch的工作流程包括多个步骤,如生成段(Segments)、迭代抓取(Fetch)、解析(Parse)、更新链接数据库(Update)、生成新的种子(Generate)、选择待抓取页面(Select)、重定向处理(Fetch)以及索引(Index)...

    实验报告(利用Nutch和IKanalyzer构造中文分词搜索引擎)

    在Nutch 1.2中集成IKAnalyzer,需要修改NutchAnalysis.jj文件,将SIGRAM规则调整为支持连续的汉字,然后在代码中初始化IKTokenizer,使其能够处理输入的文本流。通过这种方式,Nutch现在能够对抓取的网页内容进行...

Global site tag (gtag.js) - Google Analytics