- 浏览: 957206 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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懒加载?什么时候用懒加载?为什么要用懒加载?
HTMLParser的两种使用方法
文章分类:Java编程
HTMLParser的两种使用方法
因为论文的关系,要用到HTMLParser这个项目(使用的HTMLParser版本是1.6) 一,数据组织分析:
HtmlParser主要靠Node、AbstractNode和Tag来表达Html,因为Remark和Text相对简单,此处就将其忽略了。
Node分成三类:
二,Visitor方式访问Html:
1,整体解析过程
2,Visit过程
3,获取节点的过程:逐步遍历Html,分析出Node。此部分较为复杂,且对于我们应用来说无需很多了解,暂跳过。
4,节点访问
节点访问采用Visitor模式,Node的accept方法和具体Visitor的visit方法是关键。
首先三类Node来accept的方式各不相同:
系统为我们实现了下面我要介绍的8种Visitor,实际上可以看作是系统给我们演示了如何做各种各样的Visitor来访问Html,因为实际上我们要真正来用HtmlParser的话,还需要特定的Visitor,而通过简单的这些系统提供的Visitor组合是难以做成什么事情的。
三,系统Visitor功能简介:
四,Filter
如果说visitor是遍历提取信息,当然这个信息可以包括某些节点或者从节点分析出来的更有效的信息,这都取决于我们的Visitor做成什么样子,那么Filter则目标很明确,就是用来提取节点的。所以说要想用HtmlParser,首先要熟悉上面讲到的数据组织。
系统定义了17种具体的Filter,包括依据节点父子关系的Filter,连接Filter组合的 Filter,依据网页内容匹配情况的filter,等等。我们也可以implement Filter来做自己的Filter来提取节点。
Filter的调用是同Visitor独立的,因为也无需先filter出一些NodeList,再用 Visitor来访问。调用Filter的方法是:
NodeList nodeList = myParser.parse(someFilter);
解析之后,我们可以采用:
Node[] nodes = nodeList.toNodeArray();
来获取节点数组,也可以直接访问:
Node node = nodeList.elementAt(i)来获取Node。
另外,在Filter后得到NodeList以后,我们仍然可以使用NodeList的 extractAllNodesThatMatch(someFilter)来进一步过滤,同时又可以用NodeList的 isitAllNodesWith(someVisitor)来做进一步的访问。
这样,我们可以看到HtmlParser为我们提供了非常方便的Html解析方式,针对不同的应用可以采用 visitor来遍历Html节点提取数据,也可以用Filter来过滤节点,提取出我们所关注的节点,再对节点进行处理。通过这样的组合,一定能够找出我们所需要的信息。
我的代码
package com.eric.Html.htmlparser;
import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.HasChildFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; import org.htmlparser.visitors.TextExtractingVisitor; /** */ /** * @author 作者 Eric yang E-mail:yjboy1982@126.com * @version 创建时间:2007-7-16 下午02:49:55 * 类说明 */ public class AstroExtractorTest ... { /** */ /** * @param args * @throws ParserException */ public static void main(String[] args) throws ParserException ... { // TODO Auto-generated method stub String title ; String constellation ; String body ; String summary ; Parser parser = new Parser( " http://astro.sina.com.cn/sagittarius.html " ); parser.setEncoding( " GB2312 " ) ; NodeFilter filter_constellation_summart = new AndFilter(( new TagNameFilter( " td " )),( new HasChildFilter( new TagNameFilter( " b " )))) ; NodeFilter filter_title = new AndFilter( new TagNameFilter( " font " ), new HasAttributeFilter( " class " , " f1491 " )) ; NodeFilter filter_body = new AndFilter( new TagNameFilter( " td " ), new HasAttributeFilter( " width " , " 30% " )) ; NodeList nodelist = parser.parse(filter_constellation_summart) ; Node node_constellation = nodelist.elementAt( 0 ) ; constellation = node_constellation.getFirstChild().getNextSibling().toHtml() ; Node node_summary = nodelist.elementAt( 1 ) ; NodeList summary_nodelist = node_summary.getChildren() ; summary = summary_nodelist.elementAt( 3 ).toHtml() + summary_nodelist.elementAt( 5 ).toHtml() ; parser.reset() ; nodelist = parser.parse(filter_title) ; Node node_title = nodelist.elementAt( 0 ) ; title = node_title.getNextSibling().getNextSibling().toHtml() ; // title = node_title.getNextSibling().getNextSibling().toHtml() ; parser.reset() ; nodelist = parser.parse(filter_body) ; Node node_body = nodelist.elementAt( 0 ) ; Parser body_parser = new Parser(node_body.toHtml()) ; TextExtractingVisitor visitor = new TextExtractingVisitor() ; body_parser.visitAllNodesWith(visitor) ; body = visitor.getExtractedText() ; // System.out.println(node_summary.getChildren().toHtml()) ; // System.out.println(node_body.toHtml()) ; // System.out.println(title.trim()) ; // System.out.println(constellation.trim()) ; // System.out.println(body.trim()) ; System.out.println(summary.trim()) ; } } |
发表评论
-
nutch1.4 环境变量设置
2012-04-06 12:52 1719Exception in thread "main& ... -
正则使用
2010-06-18 00:19 1131java正则表达式(java.Regex)HtmlParser ... -
nutch 1.0 读源码,过滤掉不正确的URL实现方法
2010-06-18 00:17 3390nutch 1.0 读源码,过滤掉不正确的URL实现方法: ... -
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputExnutch新发现,为以后备忘
2010-06-16 23:16 2288urls -dir mycrawl -depth 3 -top ... -
HTMLParser 解析html字符串,提取纯文本
2010-05-14 09:59 8318今天在群里问别人怎么提取文本,也没有具体告诉我用什么,只是说用 ... -
搜索引擎术语
2010-05-05 11:40 1427附录. 术语 B: 半结构化 ... -
影响Lucene索引速度原因以及提高索引速度技巧[转]
2010-04-25 00:11 2741影响Lucene索引速度原因以及提高索引速度技巧 关键字: ... -
如何配置compass的索引位置为相对路径
2009-09-01 19:28 1501Compass是对lucene进行封装 ... -
heritrix 基本介绍
2009-08-01 10:35 3901Heritrix使用小结 1. H ... -
我对HtmlParser 提取网页各属性的总结及示例说明
2009-07-08 13:50 1930/** * 属性过滤器 * @param parser ... -
数学之美 系列十三 信息指纹及其应用
2009-06-25 22:34 10342006年8月3日 上午 11:17:00 ... -
数学之美系列二十一 - 布隆过滤器(Bloom Filter)
2009-06-25 22:27 15112007年7月3日 上午 09:35:00 ... -
用HTMLParser提取URL页面超链接的一段代码(小试牛刀)
2009-06-06 16:54 7088用HTMLParser提取URL页面超 ... -
深入学习Heritrix---解析处理器(Processor)
2009-06-06 13:17 1626键字: heritrix processor 本节解析与 ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-06 10:02 1213Frontier是Heritrix最核心的组成部分之一,也是最 ... -
深入学习Heritrix---解析CrawlController
2009-06-06 10:00 1382当我们以Web UI方式使用Heritrix时,点击任务开始( ... -
深入学习Heritrix---解析Frontier(链接工厂)
2009-06-03 21:50 1514原创作者: pengranxiang 阅读:231次 ... -
lucene2.0+heritrix示例补充
2009-06-03 21:31 1537由于lucene2.0+heritrix一书示例用的网站( ... -
htmlparser 使用手册
2009-05-30 16:47 29172009-05-08 14:20 需要做一 ... -
Nutch插件机制和Nutch一个插件实例
2009-05-25 23:54 18612007年06月16日 星期六 15:07 Pl ...
相关推荐
它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。 Extraction(萃取)是一种常见的使用方式,例如: * 文本萃取:从网页...
HTMLParser提供了两种主要的解析方式:事件驱动和DOM(Document Object Model)模型。这两个jar包——htmlparser.jar和htmllexer.jar,包含了实现这些功能所需的类和方法。 htmlparser.jar是核心库,它包含了...
开发者可以打开`AnalyzeHtml.sln`,编译并运行这两个项目,以了解HtmlParser的具体使用方法和实际效果。 四、应用实例 HtmlParser在多种场景下都有广泛的应用: 1. **数据抓取**:从网页中抓取特定信息,如产品...
在HTMLParser中设置页面编码的方式有两种:一种是使用Lexer,另一种是使用静态方法createParser。由于Lexer是一个高级功能,对于大多数中文页面来说,常用的方法是使用静态方法createParser来设置编码。 6. 示例...
它提供了线性和嵌套两种解析模式,便于进行网页转换和内容抽取。HtmlParser的特点包括过滤器、访问者模式、处理自定义标签以及使用JavaBeans的便利性。这个库被设计得既快速又健壮,适用于处理互联网上的实际网页。...
HtmlParser提供了两种主要的解析器模式:`SAX-like`(类似SAX的)和`DOM-like`(类似DOM的)。SAX-like模式逐个事件处理,适合处理大型文档,内存占用低;DOM-like模式则将整个HTML结构加载到内存中,便于遍历和...
HTMLParser提供了三种主要的操作方式来处理HTML内容: 1. **事件驱动解析**:通过注册事件处理器,当HTML解析器遇到特定的HTML标签或元素时,会触发相应的事件。例如,当解析到`<div>`标签时,可以调用预先定义的...
HTMLParser是一款强大的库,用于解析HTML文档,它提供了C#和Java两种编程语言的实现,使得开发者在处理HTML内容时有了更多的灵活性。本文将深入探讨HTMLParser的核心功能、使用场景、以及如何在C#和Java中集成和使用...
该篇文章主要介绍了用C#实现HtmlParser的两种方法,分别是使用System.Net.WebClient下载网页并使用正则表达式来分析Html内容,以及使用Winista.Htmlparser.Net解析Html。下面我们将详细介绍这两种方法。 第一种方法...
HtmlParser提供了两种解析模式:SAX(简单API for XML)和DOM。SAX模式适合处理大文件,因为它不需要一次性加载整个文档;DOM模式则更直观,允许开发者通过遍历树形结构来查找元素。对于简单的爬虫,DOM模式可能更为...
标题中的“电信设备-一种基于HERITRIX和HTMLPARSER商品信息提取方法”指的是在电信设备领域,利用HERITRIX和HTMLPARSER这两个工具来提取网络上的商品信息。HERITRIX是一个开源的网络爬虫软件,用于抓取互联网上的...
下面将详细探讨HtmlParser的主要功能和使用方法,以及与之相关的技术。 首先,HtmlParser的核心功能是解析HTML文档。HTML是一种标记语言,用于创建网页内容,但它的非结构化特性使得直接处理起来较为复杂。...
在`parse5-master`这个压缩包中,很可能包含了parse5库的源码和相关资源,你可以通过阅读源码、查看示例和文档来更深入地理解这个库的工作原理,以及如何有效地使用`parse5-htmlparser2-tree-adapter`。同时,熟悉这...
Tag分为两种类型:CompositeTag和简单Tag。CompositeTag可以包含其他Tag,例如BodyTag、Div、FrameSetTag等,它们代表可以嵌套其他元素的HTML标签。简单Tag则不能包含其他Tag,如BaseHrefTag、DoctypeTag、FrameTag...
2. **解析过程**:HTMLParser的工作原理通常包括两个主要步骤:词法分析和语法分析。词法分析将HTML源代码拆分为一系列的令牌(tokens),如标签、属性、文本等。语法分析则根据HTML语法规则将这些令牌构建为DOM...
- 提供了两种解析模式:线性和嵌套。 - 支持HTML文档的转换和内容抽取。 - 内置过滤器(Filter)和访问者模式(Visitor),便于用户根据需求定制解析逻辑。 - 能够处理各种非标准的HTML代码,提高了兼容性和鲁棒性。 - ...
1. **DOMCore.dcu** 和 **DOMCore.pas**:这两个文件是关于 Document Object Model (DOM) 的核心实现。DOM 是一种标准,用于表示 HTML 或 XML 文档的树形结构,允许程序员和脚本语言通过对象接口来访问和操作文档...