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,其它版本没有测试过。
相关推荐
apache-nutch-1.6-src.tar.gz 来自APACHE官网,本人亲自测试可以使用。
nutch1.6源码,直接从官网也可以下
nutch部分网页乱码BUG修正,有代码和详细修改说明
使用nuthc可进行网络爬取数据,并可下载
nutch不用安装,是个应用程序,下载后为nutch-1.6.tar.gz,双击桌面上的cygwin快捷方式;执行以下命令: $ cd D:/Downloads/Soft $ tar zxvf nutch-1.0.tar.gz 在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境...
已编译好的版本,可以直接导入eclipse、idea。Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
Nutch1.6的编译配置过程,详细介绍了Nutch1.6的下载到安装运行过程。
nutch乱码BUG修正,详细解释了nutch乱码的原因就修复方法,有代码和详细说明
Nutch 解析器parse部分代码笔记
Nutch主要分为两个部分 爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引...
nutch 源代码的详细分析,对于自己实现自己的搜索引擎很有帮助,尤其是将nutch项目嵌入到 自己的项目 当中很有帮助!
如何通过java程序获得Nutch中网页的详细信息
1、 通过nutch,诞生了hadoop、tika、gora。 2、 nutch通过ivy来进行依赖管理(1.2之后)。...通过hadoop命令把apache-nutch-1.6.job提交给hadoop的JobTracker。 7、 nutch入门重点在于分析nutch脚本文件
nutch虽然是开源的,但初学nutch的同志门肯定对源码比较头疼,很难看懂,本资料是对crawl源码的解析,希望对大家有用。
nutch解决搜索结果高亮和网页快照链接无效及网页变形
nutch安装指南,nutch教程,nutch网络爬取
nutch配置文件的备注 解决代理问题
mp3文件信息解析。支持ID3标准的V1和V2.3.可以再nutch中使用。宁外附上nutch的parse-html的一些定制。(图片,关键字匹配)
nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据
基于Apache Nutch 1.8和Htmlunit组件,实现对于AJAX加载类型页面的完整页面内容抓取解析。 According to the implementation of Apache Nutch 1.8, we can't get dynamic ...