使用TagNameFilter过滤所有table标签结点。
package com.javaeye.suo.htmlparser.samples;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import com.javaeye.suo.htmlparser.HtmlParserUtils;
public class FilterDemo {
/**
* 使用TagNameFilter过滤所有table标签结点。
* @param parser
*/
public void filter(Parser parser) {
NodeList nodelist;
try {
/*
* 过滤所有table标签结点。
*/
NodeFilter filter = new TagNameFilter("table");
nodelist = parser.parse(filter);
Node node = nodelist.elementAt(0);
Node firstChild = node.getFirstChild();
Node secondChild = firstChild.getNextSibling();
Node thirdChild = secondChild.getNextSibling();
Node forthChild = thirdChild.getNextSibling();
System.out.println("node-->" + node.getText() + "-->" + node.toHtml());
System.out.println("firstChild-->" + firstChild.getText() + "-->" + firstChild.toHtml());//注意换行符,此结点为换行符。
System.out.println("secondChild-->" + secondChild.getText() + "-->" + secondChild.toHtml());
System.out.println("thirdChild-->" + thirdChild.getText() + "-->" + thirdChild.toHtml());
System.out.println("forthChild-->" + forthChild.getText() + "-->" + forthChild.toHtml());
} catch (ParserException e1) {
e1.printStackTrace();
}
}
public static void main(String[] args) {
String urlStr = "http://localhost:8080/HtmlParser/htmlparser.html";
Parser parser = HtmlParserUtils.getParserWithUrlConn(urlStr, "utf-8");
FilterDemo filter = new FilterDemo();
filter.filter(parser);
}
}
关键代码:NodeFilter filter = new TagNameFilter("table");
补充
:
一、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来过滤节点,提取出我们所关注的节点,再对节点进行处理。通过这样的组合,一定能够找出我们所需要的信息。
二、别人的总结
(1)利用NodeFilter对网页进行分析
1、生成一个Parser
a.通过url提取网络上的网页
Parser
parser = new
Parser();
parser.setURL("http://www.yahoo.com.cn");
b.提取本地网页文件
通过读文件把网页文件转化成字符串;
Parser
parser=Parser.createParser(html,charset);
2、利用NodeFilter做一个filter
a.利用Tag
Name
NodeFilter filter=new TagNameFilter("IMG");
b.利用Tag
Class
NodeFilter filter = new
NodeClassFilter(ImageTag.class);
3、通过匹配filter,得到所有符合条件的Tag
NodeList
list=parser.extractAllNodesThat(filter);
for(int i=0;i String
content=list.elementAt(i).toHtml();//得到符合条件的Tag内容
如果针对具体情况进行更加详细的处理,则:
ImageTag
imageTag=(ImageTag)list.elementAt(i);
…………
}
然后根据需要做相应的处理。
(2)
、利用Visitor对网页进行分析
1、生成一个Parser
a.通过url提取网络上的网页
Parser parser =
new
Parser();
parser.setURL("http://www.yahoo.com.cn");
b.提取本地网页文件
通过读文件把网页文件转化成字符串;
Parser
parser=Parser.createParser(html,charset);
2、用visitor访问页面
ex:ObjectFindingVisitor
visitor=new ObjectFindingVisitor();
parser.visitAllNodesWith(visitor);
3、通过特定的visitor得到符合条件的Tag
Node[]
nodes=visitor.getTags();
for(int i=0;i ImageTag
imageTag=(ImageTag)nodes[i];
…………
//根据需要做特定处理
}
分享到:
相关推荐
HtmlParser 是一个用于解析HTML文档的Java库,它允许开发者以结构化的方式处理HTML内容,以便提取信息或进行数据抓取。...在使用过程中,理解这些核心概念并熟练掌握Parser的创建和使用是至关重要的。
在`parse5-master`这个压缩包中,很可能包含了parse5库的源码和相关资源,你可以通过阅读源码、查看示例和文档来更深入地理解这个库的工作原理,以及如何有效地使用`parse5-htmlparser2-tree-adapter`。同时,熟悉这...
这个"HTMLParser-2.0-SNAPSHOT"版本可能是HTMLParser的一个开发版本或测试版本,包含了最新的特性和改进。 HTMLParser提供了丰富的API,使得开发者可以方便地操作HTML元素,如标签、属性和文本。以下是一些关键的...
在提供的压缩包中,`HTMLParser-2.0-SNAPSHOT-bin`可能是可执行的二进制文件,包括了编译好的JAR文件和其他运行所需的资源。而`HTMLParser-2.0-SNAPSHOT`可能包含了源代码,这对于开发者来说是宝贵的,因为他们可以...
//获取子链接,url为网页url,filter是链接过滤器,返回该页面子链接的HashSet public static Set<String> extracLinks(String url, LinkFilter filter) { Set<String> links = new HashSet(); try { ...
1. **数据解析**:在爬虫项目中,可以使用`htmlparser`先解析HTML页面,然后用`htmlparser-to-html`将解析后的数据还原,以便进一步处理或存储。 2. **模板渲染**:在前端模板引擎中,可以先将HTML模板转换成JSON,...
HTMLParser支持过滤器(Filter)和访问者模式(Visitor),允许用户根据需求选择感兴趣的节点进行处理。例如,如果你想提取所有的链接(a标签),可以创建一个`TagFilter`: ```java import org.htmlparser.filters...
HTMLParser-2.0-API.CHM
"htmlparser-1.6p.jar"是该库的特定版本,用于在Java环境中集成和使用。 HTMLParser的核心功能包括: 1. **标签和属性处理**:它可以识别并解析HTML文档中的各种标签,如`<html>`, `<head>`, `<body>`等,同时处理...
正则表达式与HTMLParser是两种在处理文本数据时非常重要的工具。正则表达式(Regular Expression)是一种模式匹配语言,常用于字符串的查找、替换和提取等操作,而HTMLParser则是用来解析HTML文档结构的工具,尤其在...
在使用HTMLParser时,首先需要创建一个`Parser`对象。可以使用无参构造函数`Parser()`或者传入一个`URLConnection`来创建解析器,这通常涉及到从网络获取HTML内容。例如: ```java Parser parser = new Parser(...
首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解HTMLParser的关键资源。通过阅读这份文档,你可以了解到如何初始化解析器,...
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载
在使用HTMLParser-C++时,开发人员需要包含相关的头文件,如`htmlparser.h`,然后创建解析器实例,例如`HTMLParser parser`。解析器通常会有一个解析HTML字符串或文件的方法,如`parseString`或`parseFile`。解析...
2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是HTMLParser库的API文档,包含了详细的Javadoc。通过解压并查阅这个文档,开发者可以了解每个类、方法和接口的功能,这对于理解和使用库中的各种功能至关重要。 3. **...
HtmlParser-2.0 API ,chm格式,方便使用