- 浏览: 275629 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
夏保森:
太简单了,而且不是太好用,我现在项目就是要实现这样一个功能,比 ...
前台拼接SQL语句 -
人参萝卜:
楼主你好,想要一下这个样例工程的源码,能否分享一下,多谢多谢! ...
MxGraph web流程设计器破解 -
814292160:
为什么解压不了
extjs多文件上传 -
dongqing82585061:
楼主你好,能给份这个demo给我吗?现在我刚好需要实现类似的效 ...
MxGraph web流程设计器破解 -
ddccjjwwjj:
在JBPM中你的连线坐标根本无法做到JBPM的效果 全部会变形 ...
MxGraph web流程设计器破解
需要做一个垂直搜索引擎,比较了nekohtml和htmlparser 的功能,尽管nekohtml在容错性、性能等方面的口碑好像比htmlparser好(htmlunit也用的是nekohtml),但感觉 nekohtml的测试用例和文档都比htmlparser都少,而且htmlparser基本上能够满足垂直搜索引擎页面处理分析的需求,因此先研究一下htmlparser的使用,有空再研究nekohtml和mozilla html parser的使用。 html的功能还是官方说得最为清楚,
HTML Parser is a Java library used to parse HTML in either a linear or nested fashion. Primarily used for transformation or extraction, it features filters, visitors, custom tags and easy to use JavaBeans. It is a fast, robust and well tested package.
Welcome to the homepage of HTMLParser - a super-fast real-time parser for real-world HTML. What has attracted most developers to HTMLParser has been its simplicity in design, speed and ability to handle streaming real-world html.
The two fundamental use-cases that are handled by the parser are extraction and transformation (the syntheses use-case, where HTML pages are created from scratch, is better handled by other tools closer to the source of data). While prior versions concentrated on data extraction from web pages, Version 1.4 of the HTMLParser has substantial improvements in the area of transforming web pages, with simplified tag creation and editing, and verbatim toHtml() method output.
研究的重点还是extraction的使用,有空再研究transformation的使用。
1、htmlparser对html页面处理的数据结构
如图所示,HtmlParser采用了经典的Composite模式,通过RemarkNode、TextNode、TagNode、AbstractNode和Tag来描述HTML页面各元素。
* org.htmlparser.Node:
Node接口定义了进行树形结构节点操作的各种典型操作方法,包括:
节点到html文本、text文本的方法:toPlainTextString、toHtml
典型树形结构遍历的方法:getParent、getChildren、getFirstChild、getLastChild、getPreviousSibling、getNextSibling、getText
获取节点对应的树形结构结构的顶级节点Page对象方法:getPage
获取节点起始位置的方法:getStartPosition、getEndPosition
Visitor方法遍历节点时候方法:accept (NodeVisitor visitor)
Filter方法:collectInto (NodeList list, NodeFilter filter)
Object方法:toString、clone
* org.htmlparser.nodes.AbstractNode:
AbstractNode是形成HTML树形结构抽象基类,实现了Node接口。
在htmlparser中,Node分成三类:
RemarkNode:代表Html中的注释
TagNode:标签节点。
TextNode:文本节点
这三类节点都继承AbstractNode。
* org.htmlparser.nodes.TagNode:
TagNode包含了对HTML处理的核心的各个类,是所有TAG的基类,其中有分为包含其他TAG的复合节点ComositeTag和不包含其他TAG的叶子节点Tag。
复合节点CompositeTag:
AppletTag,BodyTag,Bullet,BulletList,DefinitionList,DefinitionListBullet,Div,FormTag,FrameSetTag,HeadingTag,
HeadTag,Html,LabelTag,LinkTag,ObjectTag,ParagraphTag,ScriptTag,SelectTag,Span,StyleTag,TableColumn,
TableHeader,TableRow,TableTag,TextareaTag,TitleTag
叶子节点TAG:
BaseHrefTag,DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag,
2、htmlparser对html页面处理的算法
主要是如下几种方式
* 采用Visitor方式访问Html
public static void testVisitorAll()
{
try
{
Parser parser = new Parser();
parser.setURL("http://www.google.com");
parser.setEncoding(parser.getEncoding());
NodeVisitor visitor = new NodeVisitor()
{
public void visitTag(Tag tag)
{
logger.info("testVisitorAll() Tag name is :" + tag.getTagName() + " Class is :" + tag.getClass());
}
};
parser.visitAllNodesWith(visitor);
} catch (ParserException e)
{
e.printStackTrace();
}
}
* 采用Filter方式访问html
public static void testLinkTag()
{
try
{
NodeFilter filter = new NodeClassFilter(LinkTag.class);
Parser parser = new Parser();
parser.setURL("http://www.google.com");
parser.setEncoding(parser.getEncoding());
NodeList list = parser.extractAllNodesThatMatch(filter);
for (int i = 0; i < list.size(); i++)
{
LinkTag node = (LinkTag) list.elementAt(i);
logger.fatal("testLinkTag() Link is :" + node.extractLink());
}
} catch (Exception e)
{
e.printStackTrace();
}
}
* 采用org.htmlparser.beans方式
public static void testLinkBean()
{
Parser parser = new Parser();
LinkBean linkBean = new LinkBean();
linkBean.setURL("http://www.google.com");
URL[] urls = linkBean.getLinks();
for (int i = 0; i < urls.length; i++)
{
URL url = urls[i];
logger.fatal("testLinkBean() -url is :" + url);
}
}
* parse (NodeFilter filter):通过NodeFilter方式获取
* visitAllNodesWith (NodeVisitor visitor):通过Nodevisitor方式
* extractAllNodesThatMatch (NodeFilter filter):通过NodeFilter方式
3.2、org.htmlparser.beans
对Visitor和Filter的方法进行了封装,定义了针对一些常用html元素操作的bean,简化对常用元素的提取操作。
包括:FilterBean、HTMLLinkBean、HTMLTextBean、LinkBean、StringBean、BeanyBaby等。
3.3、org.htmlparser.nodes
定义了基础的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。
3.4、org.htmlparser.tags
定义了htmlparser的各种tag。
3.5、org.htmlparser.filters
定义了htmlparser所提供的各种filter,主要通过extractAllNodesThatMatch (NodeFilter filter)来对html页面指定类型的元素进行过滤,包括:AndFilter、CssSelectorNodeFilter、 HasAttributeFilter、HasChildFilter、HasParentFilter、HasSiblingFilter、 IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、 NotFilter、OrFilter、RegexFilter、StringFilter、TagNameFilter、XorFilter
3.6、org.htmlparser.visitors
定义了htmlparser所提供的各种visitor,主要通过visitAllNodesWith (NodeVisitor visitor)来对html页面元素进行遍历,包括:HtmlPage、LinkFindingVisitor、NodeVisitor、 ObjectFindingVisitor、StringFindingVisitor、TagFindingVisitor、 TextExtractingVisitor、UrlModifyingVisitor
3.7、org.htmlparser.parserapplications
定义了一些实用的工具,包括LinkExtractor、SiteCapturer、StringExtractor、WikiCapturer,这几个类也可以作为htmlparser使用样例。
3.8、org.htmlparser.tests
对各种功能的单元测试用例,也可以作为htmlparser使用的样例。
发表评论
-
Struts2中list排序 sort标签按降序排列
2011-07-18 03:01 3961struts2中sort标签默认是按升序排列的,如果想按降序排 ... -
JSP版的完善KindEditor在线编辑器开源代码
2011-07-09 13:18 1542package com.elkan.kindeditor.up ... -
js浮动toolbar
2011-07-09 12:41 1885这几天做程序一直在找浮动的toolbar 找到个比较好的 ... -
json lib 转换时间
2010-11-11 01:53 2264Java对象中存在Date类型的对象无法进行解析,但是我又必须 ... -
There is a cycle in the hierarchy!
2010-11-07 20:39 2964在开发过程中遇到了一个JSON-LIB和Hibernate有关 ... -
struts2-json-plugin 使用
2010-06-07 20:10 4824为了方便ajax调用传输数据,在struts2中加入的json ... -
htmlparser使用(三)
2010-05-12 14:36 1083出处:http://blog.csdn.net/ ... -
htmlparser使用(二)
2010-05-12 14:31 1919这两天准备做一些网站编程的工作,于是对HtmlParse小研究 ... -
htmlparser的使用样例
2010-05-12 14:29 1402package test; import java. ... -
Java把汉字转拼音
2009-06-16 16:12 7372/** * 汉字转换位汉语拼音,英文字符不变 ... -
对象转换成JSON字符串的方法
2009-05-21 12:10 2354import java.lang.reflect.Field; ... -
Java中的List排序
2009-04-27 01:03 1839//java list 排序 //关键词: j ... -
java中json处理的使用
2009-02-27 13:30 7355/** * Copyright (c) linkwise 2 ... -
Java操作json的通用类
2009-02-27 13:05 1590package com.baiyyy.polabs.util. ... -
任意对象转化为JSON
2009-02-27 12:57 1657import java.beans.Introspection ... -
JSON 字符串的工具
2009-02-27 12:53 1394import java.util.ArrayList; imp ... -
java常用函数收集(二)
2008-09-06 17:47 1381/** * 人民币转成大写 * ... -
java常用函数收集(一)
2008-08-23 12:18 1642Java代码 /** * ...
相关推荐
下面是一个简单的 HTMLParser 使用举例: ```java package com.amigo.htmlparser; import java.io.*; import java.net.URL; import java.net.URLConnection; import org.htmlparser.filters.*; import org....
本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...
本文将通过一个具体的例子来详细介绍如何在Java中使用`HtmlParser`库进行HTML文档的解析。 #### 示例背景 假设我们正在开发一款Android应用,该应用需要从HTML文件中提取特定的数据。这里我们将使用`HtmlParser`库...
以下是一个使用HTMLParser的简单示例,展示了如何从文件或URL读取HTML内容并进行解析: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.FileInputStream; import java....
总的来说,`C# HtmlParser使用小实例`为我们提供了一个学习和实践HTML解析的起点。通过阅读提供的`C# HtmlParser使用实例.doc`文档,你可以深入了解如何利用这个库来满足你的具体需求。同时,`winsta.Htmlparser.chm...
本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...
1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...
在HTMLParser中设置页面编码的方式有两种:一种是使用Lexer,另一种是使用静态方法createParser。由于Lexer是一个高级功能,对于大多数中文页面来说,常用的方法是使用静态方法createParser来设置编码。 6. 示例...
在本文中,我们将深入探讨HTMLParser的使用,包括其核心类`Parser`以及如何初始化和使用它。 首先,`Parser`是HTMLParser库的核心组件,它负责解析HTML页面。`Parser`类提供了多个构造函数,以适应不同的初始化需求...
虽然在某些方面,如容错性和性能,NekoHTML可能更胜一筹,并且被HTMLUnit所采用,但HTMLParser的文档和测试用例相对更丰富,对于构建垂直搜索引擎的页面处理和分析需求,HTMLParser是一个不错的选择。 HTMLParser的...
5. **兼容性与扩展性**:HTMLParser与其他Java库兼容良好,如JDOM、DOM4J等,可以方便地与其他XML处理工具结合使用。此外,它的API设计使得扩展功能相对简单。 6. **错误处理**:HTMLParser具有一定的容错能力,...
在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...
除了正则表达式,本话题还提到了HTMLParser的使用。HTMLParser是一个Java库,用于解析HTML文档,提取或修改数据。它可以处理HTML标签、属性、文本等内容,对网页内容进行分析和操作。使用HTMLParser,开发者可以方便...
HTMLParser提供了多种方法来访问和操作解析树,比如`parseContent()`用于获取整个文档的节点列表,`visitAllNodesWith()`可以遍历所有节点并应用自定义的访问器,`getFirstNodeWithTag()`用于找到第一个特定标签的...
以下是一个简单的示例,展示了如何使用 HTMLParser 从文件或 URL 中读取 HTML 并进行解析: ```java import org.htmlparser.Parser; import org.htmlparser.util.NodeIterator; import org.htmlparser.util....
`htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...
使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...
9. 结合其他工具:HTMLParser可以与其他工具结合使用,如Jsoup,后者是一个更现代的HTML解析库,提供更友好的API和更强的CSS选择器支持。两者结合可以提高处理复杂HTML文档的效率。 10. 性能考虑:虽然HTMLParser...
"htmlparser实现从网页上抓取数据.doc"文件则很可能是一个详细的教程,指导用户如何利用HTMLParser库进行网页数据抓取。在这个教程中,可能会涵盖以下关键知识点: 1. **安装和引入HTMLParser**:首先,用户需要将...
htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或 提取html。它能超高速解析html,而且不会出错。现在htmlparser最新版本为2.0。 毫不夸张地说,htmlparser就是目前最好...