主要是如下几种方式
采用Visitor方式访问Html
try {
Parser parser = new Parser();
parser.setURL(”http://www.google.com”);
parser.setEncoding(parser.getEncoding());
NodeVisitor visitor = new NodeVisitor() {
public void visitTag(Tag tag) {
System.out.println (”testVisitorAll() Tag name is :”
+ tag.getTagName() + ” \n Class is :”
+ tag.getClass());
}
};
parser.visitAllNodesWith(visitor);
} catch (ParserException e) {
e.printStackTrace();
}
采用Filter方式访问html
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);
System.out.println(”testLinkTag() Link is :” + node.extractLink());
}
} catch (Exception e) {
e.printStackTrace();
}
采用org.htmlparser.beans方式
另外htmlparser 还在org.htmlparser.beans中对一些常用的方法进行了封装,以简化操作,例如:
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];
System.out.println (”testLinkBean() -url is :” + url);
}
Htmlparser关键包结构说明
htmlparser其实核心代码并不多,好好研究一下其代码,弥补文档不足的问题。同时htmlparser的代码注释和单元测试用例还是很齐全的,也有助于了解htmlparser的用法。
3.1、org.htmlparser
定义了htmlparser的一些基础类。其中最为重要的是Parser类。
Parser是htmlparser的最核心的类,其构造函数提供了如下:Parser.createParser (String html, String charset)、 Parser ()、Parser (Lexer lexer, ParserFeedback fb)、Parser (URLConnection connection, ParserFeedback fb)、Parser (String resource, ParserFeedback feedback)、 Parser (String resource)
各构造函数的具体用法及含义可以查看其代码,很容易理解。
Parser常用的几个方法:
• elements获取元素
Parser parser = new Parser (”http://www.google.com”);
for (NodeIterator i = parser.elements (); i.hasMoreElements (); )
processMyNodes (i.nextNode ());
• 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使用的样例。
1 . 逻辑关系:与或非
OrFilter() Creates a new instance of an OrFilter. |
OrFilter(NodeFilter[] predicates) Creates an OrFilter that accepts nodes acceptable to any of the given filters. |
OrFilter(NodeFilter left, NodeFilter right) Creates an OrFilter that accepts nodes acceptable to either filter. |
OrFilter() Creates a new instance of an OrFilter. |
OrFilter(NodeFilter[] predicates) Creates an OrFilter that accepts nodes acceptable to any of the given filters. |
OrFilter(NodeFilter left, NodeFilter right) Creates an OrFilter that accepts nodes acceptable to either filter. |
2. 内容
StringFilter:功能简单有限;复杂功能可使用RegexFilter (正则表达式)
StringFilter() Creates a new instance of StringFilter that accepts all string nodes. |
StringFilter(String pattern) Creates a StringFilter that accepts text nodes containing a string. |
StringFilter(String pattern, boolean sensitive) Creates a StringFilter that accepts text nodes containing a string. |
StringFilter(String pattern, boolean sensitive, Locale locale) Creates a StringFilter that accepts text nodes containing a string. |
RegexFilter() Creates a new instance of RegexFilter that accepts string nodes matching the regular expression ".*" using the FIND strategy. |
RegexFilter(String pattern) Creates a new instance of RegexFilter that accepts string nodes matching a regular expression using the FIND strategy. |
RegexFilter(String pattern, int strategy) Creates a new instance of RegexFilter that accepts string nodes matching a regular expression. |
3 标签
TagNameFilter()利用标签名过滤 : div ,img , ...
NodeClassFilter()利用标签类别 :LinkTag.class ...
HasAttributeFilter()利用属性 :HasAttributeFilter(“class”, “className”)
LinkRegexFilter()用正则表达式匹配链接
LinkRegexFilter(String regexPattern) Creates a LinkRegexFilter that accepts LinkTag nodes containing a URL that matches the supplied regex pattern. |
LinkRegexFilter(String regexPattern, boolean caseSensitive) Creates a LinkRegexFilter that accepts LinkTag nodes containing a URL that matches the supplied regex pattern. |
LinkStringFilter(String pattern) Creates a LinkStringFilter that accepts LinkTag nodes containing a URL that matches the supplied pattern. |
LinkStringFilter(String pattern, boolean caseSensitive) Creates a LinkStringFilter that accepts LinkTag nodes containing a URL that matches the supplied pattern. |
4 层次关系
HasParentFilter() Creates a new instance of HasParentFilter. |
HasParentFilter(NodeFilter filter) Creates a new instance of HasParentFilter that accepts nodes with the direct parent acceptable to the filter. |
HasParentFilter(NodeFilter filter, boolean recursive) Creates a new instance of HasParentFilter that accepts nodes with a parent acceptable to the filter. |
HasChildFilter() Creates a new instance of a HasChildFilter. |
HasChildFilter(NodeFilter filter) Creates a new instance of HasChildFilter that accepts nodes with a direct child acceptable to the filter. |
HasChildFilter(NodeFilter filter, boolean recursive) Creates a new instance of HasChildFilter that accepts nodes with a child acceptable to the filter. |
分享到:
相关推荐
### HTMLParser抽取Web网页正文信息的关键知识点 ...通过上述步骤,HTMLParser不仅能够高效地从网页中提取正文信息,还能通过一系列智能算法确保提取的内容与主题高度相关,极大地提高了信息处理的效率和质量。
HTMLParser2.1.jar 是一个基于Java的网页解析库,主要功能是帮助开发者抓取、解析和处理HTML网页内容。这个库特别适用于构建网络爬虫项目,它提供了丰富的API和功能,使得处理复杂的HTML结构变得相对简单。在Java...
HTMLParser是一款强大的库,用于解析HTML文档,它提供了C#和Java两种编程语言的实现,使得开发者在处理HTML内容时有了更多的灵活性。本文将深入探讨HTMLParser的核心功能、使用场景、以及如何在C#和Java中集成和使用...
HTMLParser是一个用于解析HTML文档的库,它在Java编程环境中被广泛使用,特别是在处理网页内容时,例如抓取、分析或转换HTML数据。本篇文章将详细介绍如何使用HTMLParser来实现HTML摘要的截取。 首先,我们需要理解...
### HTMLParser提取网页超链接研究 #### 一、引言 随着互联网技术的快速发展和普及,全球信息资源呈爆炸式增长。在这个过程中,各种互联网搜索引擎(例如百度、谷歌等)应运而生,它们极大地便利了人们获取所需...
HTMLParser是一款专为Java开发者设计的开源HTML解析库,它提供了强大的功能,使得处理HTML文档变得更为简单。这款工具包适用于那些需要从HTML文档中提取数据、解析网页结构或者进行网页自动化任务的开发者。...
传统的HTML页面虽然适合人类阅读,但由于其结构复杂且包含大量非结构化数据,对机器来说并不友好,这限制了信息的有效利用。因此,开发一种能够自动解析和抽取网页信息的系统变得尤为重要。 ### HTMLParser原理 ...
Winista.Htmlparser是一个开源的...综上所述,Winista.Htmlparser是一个强大的HTML解析工具,可以帮助开发者轻松处理网页数据的提取和分析。通过深入学习和实践,我们可以利用它实现各种Web相关的功能,提高工作效率。
HTMLParser 是一个用于解析HTML文档的Java库,它允许开发者以结构化的方式处理HTML内容,尤其是在没有DOM(Document Object Model)或XHTML可用时。在本文档中,我们将深入探讨如何利用HTMLParser来分析和抽取正文,...
本文将深入探讨Winista.Htmlparser,一个专为C#开发的网页解析类库,它提供了高效、灵活的解决方案,助力开发者轻松处理HTML文档。 Winista.Htmlparser是一个针对C#编程语言设计的开源库,其主要功能是解析HTML文档...
1. **自动检测编码**:新的实现可能包含了对多种常见编码的自动检测算法,如通过分析HTML头部的`<meta>`标签来确定文档编码。 2. **异常处理**:如果无法自动检测到编码,新版本可能包含了更健壮的错误处理机制,...
这可能包括使用缓冲技术提高I/O效率,使用高效的字符串处理算法,以及使用多线程或异步处理来提升并发性能。 8. 库集成:在"htmlparser-master"这个压缩包中,可能包含了源代码、示例、测试用例等,用于演示如何在...
2. **HTML解析**:HTMLPARSER是处理抓取到的网页内容的关键。HTML文档通常包含大量的非结构化数据,HTMLPARSER能解析这些文档,识别出如商品名称、价格、描述等结构化的信息。通过DOM(Document Object Model)树形...
总的来说,Nim标准库`htmlparser`自1.2以来的更新带来了诸多增强,包括错误处理的改善、性能提升、API的优化以及对HTML5新特性的支持等。这些变化使得`htmlparser`成为开发者处理HTML任务的首选工具,无论是在性能、...
在这个示例中,我们将探讨如何使用Java处理复杂的HTML页面,以获取其中的链接数据。 首先,我们可以看到提到的第一个方法是尝试使用正则表达式来匹配HTML内容。虽然正则表达式在某些简单情况下可能有效,但面对HTML...
HtmlParser 网页内容提取库HtmlParser的源码项目 nekohtml-1.9.7 nekohtml的源码项目 RhinoTest 测试js解析 ExtractContext 内容抽取示例 SearchChinesePdf 包含对PDF文件的处理 parse-rtf 包含对RTF文件的处理 ...
例如,统计表格在页面中的位置、大小、与其它元素的关系等特征,然后设定阈值或使用机器学习算法来确定哪些表格更可能是正文载体。 在实际操作中,可能的步骤包括: 1. 预处理:去除HTML标签、JavaScript代码和CSS...
5. **兼容性**:考虑到不同的浏览器和环境对HTML的支持程度不同,一个好的HTML解析器应该具有良好的兼容性,能处理各种HTML版本和非标准的实现。 6. **性能优化**:由于HTML解析可能在大量数据处理中进行,所以解析...
1:HtmlSplit.pas 这个是HTML网页信息拆分组件 2:TopBuffer.pas 重复信息片动态分析组件 3:HtmlParser.pas 网页链接资源分析组件 4:CoreString.pas 左右字符串操作性能的基础算法