Nutch1.6在使用默认网页解析插件解析网页文本时,有些网页会出现在乱码问题。
出现乱码的原因分析:
parse-html插件在解析网页文本时,会先使用正则表达匹配出网页的编码。源码如下:
private static Pattern metaPattern =
Pattern.compile("<meta\\s+([^>]*http-equiv=(\"|')?content-type(\"|')?[^>]*)>",
Pattern.CASE_INSENSITIVE);
private static Pattern charsetPattern =
Pattern.compile("charset=\\s*([a-z][_\\-0-9a-z]*)", Pattern.CASE_INSENSITIVE);
该正则表达式只能匹配出使用<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />标明网页编码的网页。国内有些网站是使用<meta charset="utf-8" />来标明网页编码,因此插件无法解析出网页的编程。当无法解析出网页编码时,插件会使用nutch配置文件设置的默认解析编码。如果没有在nutch-site.xml文件中配置默认解析网页的编码,程序会使用nutch-default.xml文件的默认配置。默认配置如下:
<property>
<name>parser.character.encoding.default</name>
<value>windows-1252</value>
<description>The character encoding to fall back to when no other information
is available</description>
</property>
默认编码是windows-1252,针对没有提取出网页编码的网页,解析出来的网页内容就是乱码了。
解决方法:
1、 针对在网页代码中使用<meta charset="utf-8" />标明网页编码的网站,在HtmpParser类中增加提取网页编码的代码。偶写的正则表达式是:
private static Pattern metaPaternOther = Pattern.compile("<meta\\s+([^>]*charset=\\s*(\"|')?\\s*([a-z][_\\-0-9a-z]*)(\"|')?[^>]*)>",Pattern.CASE_INSENSITIVE);
private static Pattern charsetPatternOther =
Pattern.compile("charset=\\s*((\"|')?([a-z][_\\-0-9a-z]*))", Pattern.CASE_INSENSITIVE);
Java代码就不贴出来了,很简单的。
目前我还没有发现其它标注网页编码的方式,所以只写处理了这种情况的代码。如果有同学发现了其它形式,请也告诉我哈,我再完善一下代码。
2、 如果网页没有使用以上两种形式标明网页编码,那么可以在nutch-site.xml配置文件设置默认解析网页的编码为utf-8或者gb2312。Nutch会使用配置的默认编码解析网页,对于中文网站来说,主要是这两种编码。
<property>
<name>parser.character.encoding.default</name>
<value>utf-8</value>
<description>The character encoding to fall back to when no other information is available</description>
</property>
经过这样处理,解析爬取的网页再没有出现乱码的现象了。我使用nutch版本是1.6,其它版本没有测试过。
相关推荐
Nutch 1.6 是一个开源的网络爬虫项目,由Apache...在处理大量网页数据时,Nutch 提供了一个高效、可扩展的解决方案。对于想要从事数据分析、搜索引擎优化或网络监控的人来说,Nutch 1.6 是一个值得深入研究的开源项目。
1. **源代码目录**:包含了所有Nutch项目的Java源代码,这些代码负责爬虫的各个模块,如爬行策略、URL过滤、网页解析、索引生成等。主要的源代码文件位于`src/java`目录下,按照包结构组织,例如`org.apache.nutch....
Nutch 1.6 是一个开源的网络爬虫项目,由Apache软件基金会开发,主要用于抓取、索引和搜索Web内容。Nutch是Hadoop生态的一部分,它利用Hadoop的分布式计算能力处理大规模数据,因此在大数据环境中尤其受到青睐。...
总的来说,解决Nutch的网页乱码问题需要深入理解字符编码原理,以及Nutch内部的处理流程。通过优化URL解码、HTTP头解析、字符集探测和转换逻辑,我们可以有效地避免或修复乱码问题,从而提高Nutch的抓取质量和用户...
通过以上步骤,一般可以解决Nutch在处理网页内容时的乱码问题。在实践中,遇到的具体问题可能有所不同,因此可能需要对上述步骤进行适当的调整。如果提供的压缩包文件“nutch乱码BUG修正”包含了具体的代码和说明,...
nutch不用安装,是个应用程序,下载后为nutch-1.6.tar.gz,双击桌面上的cygwin快捷方式;执行以下命令: $ cd D:/Downloads/Soft $ tar zxvf nutch-1.0.tar.gz 在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境...
3. **Field Types**:Nutch将每个网页的信息存储为一系列字段,如`content`(网页内容)、`url`(URL)、`parse_data`(解析后的数据)等。理解这些字段类型是获取具体信息的关键。 4. **Metadata**:每个网页都有...
ParseSegment 对 Fetcher 下载的网页内容进行解析,提取出文本、元数据等信息。解析后的数据会分别存储在 parse_text、parse_data 和 crawl_parse 文件夹中。这些数据会以 SequenceFileInputFormat 输入,通过 ...
其中,解析器(Parser)是Nutch的重要组成部分之一,负责从抓取到的网页中抽取有价值的信息。本文将深入探讨Nutch解析器中`parse`方法的具体实现,通过代码笔记的形式,剖析其关键逻辑及设计思想。 #### 二、`...
**Nutch 网页爬取总结** **前言** Nutch 是一个开源的网络爬虫项目,由 Apache 基金会维护,主要用于构建大规模的搜索引擎。它提供了从互联网抓取网页、分析链接关系、生成倒排索引等一系列功能。Nutch 的设计目标...
2. **快照链接无效**:Nutch 在抓取网页时会创建网页快照,方便用户查看网页的历史状态。如果快照链接失效,可能是由于URL重定向、网页结构改变或存储问题导致。为了解决这个问题,可以: - 检查 Nutch 的抓取日志...
Nutch 的源代码解析对于深入理解搜索引擎的工作原理以及自定义搜索引擎的实现非常有帮助。下面我们将详细探讨 Nutch 的注入(Injector)过程,这是整个爬取流程的第一步。 Injector 类在 Nutch 中的作用是将输入的 ...
通过以上步骤,Nutch 1.6就能在已有的Hadoop环境中配置并运行起来,实现网页抓取功能。值得注意的是,由于Nutch的配置可能因环境差异而略有不同,所以在官方文档可用的情况下,优先参考官方文档进行配置是最可靠的...
Apache Nutch 是一个流行的开源网络爬虫项目,用于抓取和索引互联网上的网页。在深入理解 Nutch 的工作原理之前,了解其源码是至关重要的。本文将解析 Nutch-0.9 版本中的 `Crawl` 类,它是 Nutch 抓取流程的起点。 ...
在描述中提到,MP3文件信息解析可以与Nutch结合,这可能是为了在爬取网页时识别和处理MP3链接,提取音频文件的元数据,从而丰富索引内容。Nutch的`parse-html`模块负责解析HTML文档,如果进行了定制,可能包含了针对...
总结,Nutch是一个强大且灵活的网络爬虫工具,对于需要进行大规模网页抓取和搜索的项目来说,是一个理想的解决方案。通过学习和实践这个入门教程,你将能够熟练地运用Nutch进行数据采集和分析。
Nutch 提供了一套完整的解决方案,包括爬虫、索引器和搜索引擎,使得开发者可以轻松构建自己的网络爬虫系统。 **Nutch 的架构** Nutch 的架构基于分治思想,整个抓取过程被分为多个步骤,包括种子页面生成、页面...
Nutch的核心价值在于提供了一个透明且公正的搜索解决方案,与商业化搜索引擎不同,Nutch不依赖于付费排名,而是致力于提供最相关的搜索结果。它允许用户自建搜索引擎,通过抓取和索引大量网页,实现高速搜索和高质量...
此外,Nutch还支持其他数据存储解决方案,如Cassandra或MongoDB。 7. **索引与搜索**:Nutch不仅抓取网页,还会将抓取的数据进行索引,以便于后续的搜索操作。它集成了Lucene库,提供高效的全文检索功能。 8. **...
Nutch最初设计的目标是创建一个与商业搜索引擎相媲美的开放源代码搜索解决方案,用于企业内部或特定领域的信息检索。 2. **Nutch的功能** - **网页抓取**:Nutch使用爬虫技术,通过种子URL开始,遍历互联网上的...