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


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)




按DOM模型解析html文件的工具包 已下是源码列表: META-INF/MANIFEST.MF META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans.BeanyBaby.class org.htmlparser.beans.FilterBean.class org.htmlparser.beans.HTMLLinkBean.class org.htmlparser.beans.HTMLTextBean.class org.htmlparser.beans.LinkBean.class org.htmlparser.beans.StringBean.class org.htmlparser.filters.AndFilter.class org.htmlparser.filters.CssSelectorNodeFilter.class org.htmlparser.filters.HasAttributeFilter.class org.htmlparser.filters.HasChildFilter.class org.htmlparser.filters.HasParentFilter.class org.htmlparser.filters.HasSiblingFilter.class org.htmlparser.filters.IsEqualFilter.class org.htmlparser.filters.LinkRegexFilter.class org.htmlparser.filters.LinkStringFilter.class org.htmlparser.filters.NodeClassFilter.class org.htmlparser.filters.NotFilter.class org.htmlparser.filters.OrFilter.class org.htmlparser.filters.RegexFilter.class org.htmlparser.filters.StringFilter.class org.htmlparser.filters.TagNameFilter.class org.htmlparser.http.HttpHeader.class org.htmlparser.sax.Attributes.class org.htmlparser.sax.Feedback.class org.htmlparser.sax.Locator.class org.htmlparser.sax.XMLReader.class org.htmlparser.scanners.CompositeTagScanner.class org.htmlparser.scanners.JspScanner.class org.htmlparser.scanners.ScriptDecoder.class org.htmlparser.scanners.ScriptScanner.class org.htmlparser.scanners.StyleScanner.class org.htmlparser.tags.AppletTag.class org.htmlparser.tags.BaseHrefTag.class org.htmlparser.tags.BlockquoteTag.class org.htmlparser.tags.BodyTag.class org.htmlparser.tags.Bullet.class org.htmlparser.tags.BulletList.class org.htmlparser.tags.CompositeTag.class org.htmlparser.tags.DefinitionList.class org.htmlparser.tags.DefinitionListBullet.class org.htmlparser.tags.Div.class org.htmlparser.tags.DoctypeTag.class org.htmlparser.tags.FormTag.class org.htmlparser.tags.FrameSetTag.class org.htmlparser.tags.FrameTag.class org.htmlparser.tags.HeadTag.class org.htmlparser.tags.HeadingTag.class org.htmlparser.tags.Html.class org.htmlparser.tags.ImageTag.class org.htmlparser.tags.InputTag.class org.htmlparser.tags.JspTag.class org.htmlparser.tags.LabelTag.class org.htmlparser.tags.LinkTag.class org.htmlparser.tags.MetaTag.class org.htmlparser.tags.ObjectTag.class org.htmlparser.tags.OptionTag.class org.htmlparser.tags.ParagraphTag.class org.htmlparser.tags.ProcessingInstructionTag.class org.htmlparser.tags.ScriptTag.class org.htmlparser.tags.SelectTag.class org.htmlparser.tags.Span.class org.htmlparser.tags.StyleTag.class org.htmlparser.tags.TableColumn.class org.htmlparser.tags.TableHeader.class org.htmlparser.tags.TableRow.class org.htmlparser.tags.TableTag.class org.htmlparser.tags.TextareaTag.class org.htmlparser.tags.TitleTag.class org.htmlparser.util.CharacterReference.class org.htmlparser.util.CharacterReferenceEx.class org.htmlparser.util.DefaultParserFeedback.class org.htmlparser.util.FeedbackManager.class org.htmlparser.util.IteratorImpl.class org.htmlparser.util.NodeTreeWalker.class org.htmlparser.util.ParserFeedback.class org.htmlparser.util.ParserUtils.class org.htmlparser.util.Translate.class org.htmlparser.visitors.HtmlPage.class org.htmlparser.visitors.LinkFindingVisitor.class org.htmlparser.visitors.ObjectFindingVisitor.class org.htmlparser.visitors.StringFindingVisitor.class org.htmlparser.visitors.TagFindingVisitor.class org.htmlparser.visitors.TextExtractingVisitor.class org.htmlparser.visitors.UrlModifyingVisitor.class org/htmlparser/beans/images/Chain16.gif org/htmlparser/beans/images/Chain32.gif org/htmlparser/beans/images/Knot16.gif org/htmlparser/beans/images/Knot32.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值