【搜索引擎】HTMLParser - org.htmlparser.Node(1)

本文介绍了一个HTML解析器的使用方法,包括如何通过Parser类解析网页并构建节点树,以及如何利用Node类及其方法来遍历这棵树并获取所需信息。


Parser将网页信息解析成为一棵节点树,Node(节点里)保存了信息。

下面是一些常用的类和方法:

Parser解析类方法:
NodeIterator elements(); 获取节点迭代器(此方法搭配迭代器的方法可用于获取根节点,详见示例)
void setEncoding(String encoding); 设置编码方式


NodeIterator节点迭代器:
Node nextNode(); 下一个节点
boolean hasMoreNodes(); 是否还有Node,是则返回true,否则返回false


Node类树形结构进行遍历的函数:
Node getParent():取得父节点
NodeList getChildren ():取得子节点的列表(数组)
Node getFirstChild ():取得第一个子节点
Node getLastChild ():取得最后一个子节点
Node getPreviousSibling ():取得前一个兄弟节点
Node getNextSibling ():取得后一个兄弟节点


Node类取得Node内容的函数:
String getText ():取得文本
String toPlainTextString():取得纯文本信息。
String toHtml () :取得HTML信息(原始HTML)
String toHtml (boolean verbatim):取得HTML信息(原始HTML)
String toString ():取得字符串信息(原始HTML)
Page getPage ():取得这个Node对应的Page对象
int getStartPosition ():取得这个Node在HTML页面中的起始位置
int getEndPosition ():取得这个Node在HTML页面中的结束位置


Nodelist节点数组类方法:
Node[] toNodeArray(); 转换成节点数组


示例:递归输出网页节点信息

package ParserStudy;

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

public class TestNode {
	
	public static void main(String[] args) throws ParserException {
		// TODO Auto-generated method stub
		String url = "http://localhost:81/hello.php";
		String encoding = "GBK";
		Parser parser = new Parser(url);
		parser.setEncoding(encoding);
		
		Node root = parser.elements().nextNode(); //获取根节点
		showNode(root);
	}
	
	public static void showNode(Node node)
	{
		if(node == null)
			return;
		System.out.println("=============================================");
		System.out.println("getText:"+node.getText());
		System.out.println("toPlainTextString:"+node.toPlainTextString());
		System.out.println("toHtml:"+node.toHtml());
		System.out.println("toString:"+node.toString());
		System.out.println("=============================================");
		//获取子节点
		NodeList nodelist = node.getChildren();
		if(nodelist == null)
			return;
		Node[] na = nodelist.toNodeArray();
		//迭代输出Node信息
		for(Node i:na)
		{
			showNode(i);
		}
		
	}
}

下面是原网页:

<html>
<body>
我的名字叫:小明性别;男我的年龄是:20<br>我的名字叫:熊性别;女我的年龄是:30<br>我的名字叫:向日葵性别;男我的年龄是:25<br> 

</body>
</html>

源网页使用HTML标签,以标签为节点,标签里含的文本(换行符当成文本)和标签为子节点,形成的节点树状图为:


递归时,从根节点开始,先输出根节点的信息,然后依次输出根节点的子节点信息。
从输出的结果可知:
1.HTML的双标签会解析为一个节点
2.HTML的单标签会解析为一个节点
3.文本会解析为一个节点
4.脚本里的换行符会当成文本,从而成为了一个节点(所以第二个输出的节点和最后一个的节点是换行符\n)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值