htmlparser的简单使用说明

一、DOM过滤

1. 根据attribute过滤
Parser parser = new Parser(htmlString);// or new Parser(url)
NodeFilter filter = new HasAttributeFilter("class", "sidebar");// 本例为根据class过滤,当然可以标签中的任意attribute
NodeList nodelist = parser.extractAllNodesThatMatch(filter);

2. 根据tag过滤
NodeList nodelist = parser.parse(new TagNameFilter("table"));// 根据table标签过滤
or
NodeList nodelist = parser.parse(new NodeClassFilter(TableTag.class));

3. 层级and过滤
// 如查找示例1中class="sidebar"下面的tr标签
NodeFilter filter = new HasAttributeFilter("class", "sidebar");
NodeFilter f = new AndFilter(new TagNameFilter("tr"), new HasParentFilter(filter));
NodeList nodelist = parser.parse(f);
or
// 查找所有table下面的tr
NodeFilter f = new AndFilter(new TagNameFilter("tr"), new HasParentFilter(new TagNameFilter("table")));
NodeList nl = parser.parse(f);

4. or满足
Parser parser = new Parser(url);
// parser.setEncoding("UTF-8");
// 过滤得到class为toptext,或者id为sample的内容
HasAttributeFilter[] f = new HasAttributeFilter[] {
new HasAttributeFilter("class", "toptext"),
new HasAttributeFilter("id", "sample")
};
NodeFilter nodeFilter = new OrFilter(f);

// and过滤类似


二、NodeList遍历及子节点
1. for循环
for (int i = 0; i < nodeList.size(); i++) {
Node node = nodeList.elementAt(i);
}

2. SimpleNodeIterator
SimpleNodeIterator iterator = nodeList.elements();
while(iterator.hasMoreNodes()) {
Node node = iterator.nextNode();
}

3. 子节点
NodeList pList = node.getChildren();// 获取子节点



三、节点判断
// 判断node是否为head标签
if (node instanceof org.htmlparser.tags.HeadingTag) {...}

// 判断node是否为div标签
if (node instanceof org.htmlparser.tags.Div) {...}

// 判断node是否为p标签
if (node instanceof org.htmlparser.tags.ParagraphTag) {...}

// MORE ...

// etc:判断当前div是否class为section
if ("section".equals(((org.htmlparser.tags.Div) node).getAttribute("class"))) {...}


四、内容获取

// 获取节点源html内容
node.toHtml()

// 获取节点文本内容,如输入“<td>abc</td>”,输出“abc”
node.toPlainTextString
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值