- 浏览: 958196 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
使用nutch 0.9自带的程序包搜索的时候,存在一个冗余数据的情况。例如,如果想搜索关于姚明、易建联等的信息时,nutch默认会把网页中导航条或者一些标题等中包含姚明和易建联信息的页面检索出来,以腾讯为例,http://sports.qq.com/nba/的导航条部分包含了姚明和易建联。
但这个页面的其他信息没有设计到姚明和易建联,所以这个页面可能实际上不是我们想要的;
还有一种情况,当我们想搜索“莎娃”的时,nutch会抓取到http://sports.qq.com/a/20090108/000407.htm,但实际上“莎娃”只是在这个页面的右边超链接款上有包含“莎娃”的信息。
如下图:
这个页面也可能不是我们想要的。
深入研究nutch工作原理:
结论:nutch通过HTMLParser把爬取到的网页解析成文本格式,保存到本地硬盘,然后再通过lucene建立索引,如果想达到去除无用信息目的,就要从图中红色标注的部分入手。
优化搜索结果方法1:
改写org.apache.nutch.parse.html.DOMContentUtils文件,修改方法getTextHelper方法:
getTextHelper源代码:
private boolean getTextHelper(StringBuffer sb, Node node,
boolean abortOnNestedAnchors,
int anchorDepth) {
if ("script".equalsIgnoreCase(node.getNodeName())) {
return false;
}
if ("style".equalsIgnoreCase(node.getNodeName())) {
return false;
}
if (abortOnNestedAnchors && "a".equalsIgnoreCase(node.getNodeName())) {
anchorDepth++;
if (anchorDepth > 1)
return true;
}
if (node.getNodeType() == Node.COMMENT_NODE) {
return false;
}
if (node.getNodeType() == Node.TEXT_NODE) {
// cleanup and trim the value
String text = node.getNodeValue();
text = text.replaceAll("\\s+", " ");
text = text.trim();
if (text.length() > 0) {
if (sb.length() > 0) sb.append(' ');
sb.append(text);
}
}
boolean abort = false;
NodeList children = node.getChildNodes();
if (children != null) {
int len = children.getLength();
for (int i = 0; i < len; i++) {
if (getTextHelper(sb, children.item(i),
abortOnNestedAnchors, anchorDepth)) {
abort = true;
break;
}
}
}
return abort;
}
自定义方法(实际上就是过滤掉解析下来包含<a href=" ">的信息):
private boolean getTextHelper(StringBuffer sb, Node node,
boolean abortOnNestedAnchors,
int anchorDepth) {
if ("script".equalsIgnoreCase(node.getNodeName())) {
return false;
}
if ("style".equalsIgnoreCase(node.getNodeName())) {
return false;
}
if (abortOnNestedAnchors && "a".equalsIgnoreCase(node.getNodeName())) {
anchorDepth++;
if (anchorDepth > 1)
return true;
}
if (node.getNodeType() == Node.COMMENT_NODE) {
return false;
}
if (node.getNodeType() == Node.TEXT_NODE) { //node是解析下来的网页源文件所包含的内容
//Node.TEXT_NODE:节点属于文本节点<body><div><a href><td>等标签
// cleanup and trim the value
String text = node.getNodeValue(); //获取节点里面的文本内容,相当与去掉HTML标签
/* 过滤掉包含的特殊字符*/
text = text.replaceAll("\\s+", " ");
text = text.replace("【", "");
text = text.replace("】", "");
text = text.replace("[", "");
text = text.replace("]", "");
text = text.replace("|", "");
text = text.replace("┊", "");
text = text.replace("?", "");
text = text.replace("?", "");
text = text.replace("?", "");
text = text.replace("|", "");
text = text.replace("、", "");
text = text.replace("-", "");
text = text.replace("~", "");
text = text.replace("!", "");
text = text.replace("@", "");
text = text.replace("#", "");
text = text.replace("$", "");
text = text.replace("^", "");
text = text.replace("*", "");
text = text.replace("(", "");
text = text.replace(")", "");
text = text.replace("%", "");
text = text.replace(">", "");
text = text.replace("?", "");
text = text.replace("%", "");
text = text.trim();
temp = node.getParentNode().toString(); //获取父节点的标签
if (text.length() > 0 && temp.indexOf("A:") == -1) { //如果属于<a href>,则过滤...
if (sb.length() > 0) sb.append(' ');
sb.append(text);
}
}
boolean abort = false;
NodeList children = node.getChildNodes();
if (children != null) {
int len = children.getLength();
for (int i = 0; i < len; i++) {
if (getTextHelper(sb, children.item(i),
abortOnNestedAnchors, anchorDepth)) {
abort = true;
break;
}
}
}
return abort;
}
相关资料:接口org.w3c.dom.Node的使用:http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/org/w3c/dom/class-use/Node.html
发表评论
-
nutch1.4 环境变量设置
2012-04-06 12:52 1720Exception in thread "main& ... -
正则使用
2010-06-18 00:19 1132java正则表达式(java.Regex)HtmlParser ... -
nutch 1.0 读源码,过滤掉不正确的URL实现方法
2010-06-18 00:17 3394nutch 1.0 读源码,过滤掉不正确的URL实现方法: ... -
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputExnutch新发现,为以后备忘
2010-06-16 23:16 2294urls -dir mycrawl -depth 3 -top ... -
HTMLParser 解析html字符串,提取纯文本
2010-05-14 09:59 8323今天在群里问别人怎么提取文本,也没有具体告诉我用什么,只是说用 ... -
HTMLParser的两种使用方法[转]
2010-05-13 23:37 1938HTMLParser的两种使用方法 文章分类:Java编程 ... -
搜索引擎术语
2010-05-05 11:40 1429附录. 术语 B: 半结构化 ... -
影响Lucene索引速度原因以及提高索引速度技巧[转]
2010-04-25 00:11 2744影响Lucene索引速度原因以及提高索引速度技巧 关键字: ... -
如何配置compass的索引位置为相对路径
2009-09-01 19:28 1505Compass是对lucene进行封装 ... -
heritrix 基本介绍
2009-08-01 10:35 3907Heritrix使用小结 1. H ... -
我对HtmlParser 提取网页各属性的总结及示例说明
2009-07-08 13:50 1934/** * 属性过滤器 * @param parser ... -
数学之美 系列十三 信息指纹及其应用
2009-06-25 22:34 10362006年8月3日 上午 11:17:00 ... -
数学之美系列二十一 - 布隆过滤器(Bloom Filter)
2009-06-25 22:27 15122007年7月3日 上午 09:35:00 ... -
用HTMLParser提取URL页面超链接的一段代码(小试牛刀)
2009-06-06 16:54 7090用HTMLParser提取URL页面超 ... -
深入学习Heritrix---解析处理器(Processor)
2009-06-06 13:17 1627键字: heritrix processor 本节解析与 ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-06 10:02 1216Frontier是Heritrix最核心的组成部分之一,也是最 ... -
深入学习Heritrix---解析CrawlController
2009-06-06 10:00 1384当我们以Web UI方式使用Heritrix时,点击任务开始( ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-03 21:50 1517原创作者: pengranxiang 阅读:231次 ... -
lucene2.0+heritrix示例补充
2009-06-03 21:31 1542由于lucene2.0+heritrix一书示例用的网站( ... -
htmlparser 使用手册
2009-05-30 16:47 29212009-05-08 14:20 需要做一 ...
相关推荐
Nutch 0.9 版本发布于较早时期,但其核心原理和技术至今仍然对理解搜索引擎的工作机制具有重要意义。 2. **WAR 文件**: 提供的WAR(Web Application Archive)文件是Java Web 应用的标准打包格式,可以直接部署在...
### Eclipse中编译Nutch-0.9:详解与步骤 #### 核心知识点概览 在本篇文章中,我们将深入探讨如何在Eclipse环境中编译Nutch-0.9,一个开源的网络爬虫项目,用于抓取互联网上的网页信息。文章涵盖的关键知识点包括...
Nutch 0.9 是一个历史悠久的开源搜索引擎项目,它主要关注网络爬虫和网页抓取方面的技术。这个版本在当时提供了稳定且功能强大的爬虫框架,被广泛用于数据采集和分析任务。以下是对 Nutch 0.9 版本的一些关键知识点...
### Nutch 1.7 二次开发培训讲义知识点概览 #### 一、环境搭建与准备工作 **1. 开发环境的选择与配置** - **操作系统:** 二次开发Nutch 1.7时,开发阶段的操作系统选择相对灵活,只要确保安装了JDK和Eclipse即可。...
### Nutch 0.9 分页代码解析与应用 #### 一、背景介绍 Nutch 是一个开源的网络爬虫项目,它提供了高度可扩展且可靠的网页抓取框架。随着互联网的发展,数据量日益增大,如何高效地处理这些数据成为了一个重要的...
《nutch-0.9 环境搭建所需最小cygwin详解》 在构建一个功能完备的搜索引擎系统时,Apache Nutch是...尽管这需要一定的技术背景,但只要遵循上述步骤并耐心处理可能出现的问题,你就能成功构建起自己的Nutch搜索引擎。
### 二、Eclipse配置Nutch的步骤详解 #### 步骤1:创建Nutch项目 首先,在Eclipse中创建一个新的Java项目,选择“File > New > Project > Java project”,然后点击“Next”。在创建项目时,选择“Create project ...
《深入剖析Lucene+Nutch搜索引擎》 在信息技术领域,搜索引擎是不可或缺的一部分,它极大地提高了我们获取网络信息的效率。Lucene和Nutch是两个在开源社区中广泛使用的搜索引擎技术,它们各自扮演着重要的角色。本...
Nutch搜索引擎·Nutch简介及安装(第1期) Nutch搜索引擎·Solr简介及安装(第2期) Nutch搜索引擎·Nutch简单应用(第3期) Nutch搜索引擎·Eclipse开发配置(第4期) Nutch搜索引擎·Nutch浅入分析(第5期)
我们需要去抓取网页数据的时候我们就用nutch来爬取,我们对它进行二次开发使其更加符合我们的需求
`Nutch`是Apache软件基金会的一个开源项目,主要用于网络爬虫和搜索引擎的开发。它采用Java编写,提供了一个可扩展的、分布式的Web抓取框架。在编译`Nutch`项目时,可能需要依赖各种`jar`库,包括`rtf-parse.jar`和`...
### Nutch 1.7 二次开发培训讲义之腾讯微博抓取分析 #### 一、概述 Nutch 是一个开源的网络爬虫项目,它提供了灵活的数据抓取能力,并支持二次开发定制功能。本篇培训讲义主要针对的是如何使用 Nutch 1.7 版本对...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效检索。Nutch 是由 Apache Software Foundation 维护,它提供了完整的网络爬虫解决方案,包括数据采集、预处理、...
安装完上述依赖后,将Nutch的源代码包下载到本地,解压至指定目录,如C:\nutch-0.9。解压后,需要修改nutch-site.xml文件以配置Nutch运行时的相关参数,例如配置抓取的用户代理名称: ```xml <name>...
通过执行bin/nutch crawl命令,可以开始网页抓取,并在nutch-0.9目录下生成crawl文件夹存储结果。 然后,测试Nutch自带的搜索引擎。将nutch-0.9-war部署到Tomcat服务器上,并对nutch-site.xml进行配置。在运行过程...
在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境变量设置为NUTCH_JAVA_HOME=C:\Program Files\Java\jdk1.5.0(也就是说跟JAVA_HOME是相同的).测试nutch是否安装成功,只需要执行以下命令: $cd D:/Downloads/...
Nutch搜索引擎的核心功能包括网页抓取、内容解析、索引建立以及查询服务。其中,网页抓取(或称爬虫)模块负责从网络上抓取网页内容;内容解析模块用于提取网页中的文本信息;索引建立模块则将解析后的数据组织成...
Nutch 是一个开源的全文搜索引擎框架,主要用于网络爬虫的构建。它由 Apache 软件基金会开发,设计用于高效、可扩展的网络抓取和索引。在Nutch的生态系统中,插件机制是其核心特性之一,允许开发者根据需求定制特定...
### nutch+lucene开发自己的搜索引擎知识点总结 #### 一、概览 - **标题与描述**: 本资料“nutch+lucene开发自己的搜索引擎ch3.pdf”聚焦于介绍如何使用Nutch和Lucene来构建自己的搜索引擎,特别强调了第三章:...