两周前,我参考Hadoop权威指南2,写了一个读取SequenceFile的类,想读取Nutch抓取下来的segments文件。当时如果Nutch抓取的是utf8编码的中文页面就可以正常读取,但如果网页是中文编码的话就会出现乱码,比如我抓取了www.163.com,用
bin/nutch crawl urls/ -dir crawl/www.163.com/ -depth 3 -topN 50 -thread 5
由于163是用的gb2312编码的,读取crawl/www.163.com/segments/下面的文件就有乱码。同样可以用readseg一试
bin/nutch readseg -dump crawl/www.163.com/segments/20120513192613/ crawl/www.163.com/readseg-result1
查看readseg-result1/dump文件发现Content::中的网页源码信息中的中文是乱码,但观察其上方的ParseData::和ParseText::却不是乱码,于是我看了Nutch的readseg命令的源代码:org.apache.nutch.segment.SegmentReader
找到其map和reduce方法,想进行改造重新实现一个MySegmentReader,在map方法:
public void map(WritableComparable key, Writable value, OutputCollector<Text, NutchWritable> collector,
Reporter reporter) throws IOException {
// convert on the fly from old formats with UTF8 keys.
// UTF8 deprecated and replaced by Text.
if (key instanceof Text) {
newKey.set(key.toString());
key = newKey;
}
collector.collect((Text) key, new NutchWritable(value));
}
和reduce方法:
public void reduce(Text key, Iterator<NutchWritable> values, OutputCollector<Text, Text> output, Reporter reporter)
throws IOException {
StringBuffer dump = new StringBuffer();
dump.append("\nRecno:: ").append(recNo++).append("\n");
dump.append("URL:: " + key.toString() + "\n");
while (values.hasNext()) {
Writable value = values.next().get(); // unwrap
if (value instanceof CrawlDatum) {
dump.append("\nCrawlDatum::\n").append(((CrawlDatum) value).toString());
} else if (value instanceof Content) {
dump.append("\nContent::\n").append(((Content) value).toString());
} else if (value instanceof ParseData) {
dump.append("\nParseData::\n").append(((ParseData) value).toString());
} else if (value instanceof ParseText) {
dump.append("\nParseText::\n").append(((ParseText) value).toString());
} else if (LOG.isWarnEnabled()) {
LOG.warn("Unrecognized type: " + value.getClass());
}
}
output.collect(key, new Text(dump.toString()));
}
我尝试了多种转换编码的方式,然后重新执行MySegmentReader,却总是得到同样的结果Content::中的网页源码信息中的中文始终是乱码。
我想为什么不直接用ParseText::中的编码正确的信息呢?
根据reduce中
else if (value instanceof ParseText) {
dump.append("\nParseText::\n").append(((ParseText) value).toString());
}
的提示,我想可以重新写一个解析类的reduce方法,专门用于生成这种纯文本的ParseText的文件,然后交给Mahout的org.apache.mahout.text.SequenceFilesFromDirectory类
去处理。
今天我又用之前写的读取SequenceFile的类来读取了crawl/www.163.com/segments/20120513192613/parse_text/part-00000/data的信息,就是正常的无乱码的文本:
bin/hadoop jar ~/Desktop/SequenceFileReader.jar segments/20120513192613/parse_text/part-00000/data segdata-parse-text
产生的结果如下:
[7261*] http://news.163.com/12/0511/16/8183GF9B0001124J.html
分享到:
相关推荐
bin/nutch readseg-dump data/segments/20130325042858 data/segments/20130325042858_dump-nocontent-nogenerate-noparse-noparsedata –noparsetext ``` 10. **查看内容**: ``` bin/nutch readseg-dump data...
Nutch 是由 Apache Software Foundation 维护,它提供了完整的网络爬虫解决方案,包括数据采集、预处理、文本分析以及搜索功能。`apache-nutch-2.3.1-src.tar.gz` 是 Apache Nutch 的源代码包,版本号为 2.3.1,以 ...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便进行全文搜索。Nutch 1.3 是该项目的一个稳定版本,提供了许多关键功能和改进。这个源码包 "apache-nutch-1.3-src.tar.gz" 和 ...
Nutch 支持多种语言的分析,包括中文。 5. **索引器(Indexer)**:将解析和分析后的数据存储到索引库中,以便于快速查询。Nutch 可以与多种存储和索引系统集成,如Apache Solr 和Hadoop HDFS。 6. **搜索接口...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,是大数据和搜索引擎技术的重要组成部分。Nutch 2.2.1 是该项目的一个稳定版本,包含了许多优化和改进。源码的提供使得用户可以深入理解...
nutch配置nutch-default.xml
nutch不用安装,是个应用程序,下载后为nutch-1.6.tar.gz,双击桌面上的cygwin快捷方式;执行以下命令: $ cd D:/Downloads/Soft $ tar zxvf nutch-1.0.tar.gz 在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境...
Nutch是由Apache软件基金会开发并维护的,其目标是提供一种可扩展、可靠的全网搜索解决方案。Nutch 1.7是该项目的其中一个稳定版本,包含了丰富的功能和优化。 在“apache-nutch-1.7-src.tar.gz”这个压缩包中,你...
Nutch默认使用UTF-8编码,但如果网页或数据库的编码与之不匹配,就会出现乱码现象。 1. **网页抓取阶段**:Nutch通过HTTP协议获取网页内容,服务器返回的Content-Type头可能指定不同的字符编码。如果Nutch没有正确...
Nutch是一款刚刚诞生的完整的开源搜索引擎系统,可以结合数据库进行索引,能快速构建所需系统。Nutch 是基于Lucene的,Lucene为 Nutch 提供了文本索引和搜索的API,所以它使用Lucene作为索引和检索的模块。Nutch的...
Nutch 是一个高度可扩展的搜索引擎系统,由Apache软件基金会开发。它集成了网页抓取、分析、索引和搜索等功能,支持分布式处理,能够在大规模数据集上高效工作。Nutch 1.5 是其一个重要版本,相对于之前的版本,...
apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译 apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译
Apache Nutch是一个由Java编写的开源软件,主要分为两个核心部分:爬虫和索引。爬虫负责抓取互联网上的网页,而索引器则对抓取的数据进行处理,构建可用于搜索的索引。Nutch的目标是提供一个可扩展、高效的搜索解决...
Apache Nutch 是一个开源的网络爬虫框架,用于构建大规模的全文搜索引擎。Nutch 1.9 是一个较旧但稳定的版本,相比2.x系列,它不需要依赖像HBase这样的非关系型数据库,因此在部署和维护上可能更加简单。这个压缩包 ...
同时,针对中文乱码问题,分别在server.xml和cached.jsp中调整编码设置,确保中文能正确显示。 接下来,注意到Nutch的默认分词器是以单字为基础,且未处理停用词。通过Luke工具查看索引文件,确认了这一现象。为了...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效的信息检索。Nutch 1.6 是该项目的一个稳定版本,提供了丰富的功能和良好的性能。这个`apache-nutch-1.6-src.tar...
apache-nutch-1.4-bin.tar.gz.part2
### Eclipse中编译Nutch-0.9:详解与步骤 #### 核心知识点概览 在本篇文章中,我们将深入探讨如何在Eclipse环境中编译Nutch-0.9,一个开源的网络爬虫项目,用于抓取互联网上的网页信息。文章涵盖的关键知识点包括...
nutch-1.0-dev.jar nutch devlope