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)