public void getLinks(String url)
{
// 创建一个解析器对象
Parser parser;
try
{
parser = new Parser(url);
parser.setEncoding("GBK");
/**
* 布尔hasMoreNodes()方法检查是否更节点是可得到的。
* parser.elements()返回一个迭代器(枚举)在html节点。节点可以的三种主要类型: TagNode TextNode
* RemarkNode 迭代器是对集合进行迭代的。举个例子来说就是对数组进行遍历就可以使用迭代器,迭代器提供了各种方法对集合进行操作
*/
for (NodeIterator i = parser.elements(); i.hasMoreNodes();)
{
// 一般来说,当解析与迭代器或处理一个节点列表,你将需要使用递归的。e.g:
processMyNodes(i.nextNode());
}
// 创建一个NodeClassFilter接收Html标签。
NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
// 创建一个元素节点列表 parser.extractAllNodesThatMatch方法所有的节点匹配滤波器
NodeList noedlist = parser.extractAllNodesThatMatch(linkFilter);
// 重置解释器开始 注意:调用这个方法 如果过滤后调用 之前过滤的信息回滚
// parser.reset();
// 解析HTML文本内容
// System.out.println(parser.parse(null).toHtml());
for (int i = 0; i < noedlist.size(); i++)
{
LinkTag node = (LinkTag) noedlist.elementAt(i);
// System.out.println("获取href标签整个内容:"+noedlist.elementAt(i));
// System.out.println("获取href标签链接:"+node.extractLink());
}
}
catch (ParserException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// return ;
}
/**
*
* Node指定节点的最低要求的Lexer或分析器。 有三种类型的HTML:文本、评论和标签。
* 你可能会希望自己定义结点被返回的Lexer分析器,但每个或类型必须支持该接口。 更具体的接口要求每个节点类型是指定的文本、评论、标记接口。
*
* @throws ParserException
*/
void processMyNodes(Node node) throws ParserException
{
if (node instanceof TextNode)
{
// TextNode普通文本的HTML文档
TextNode text = (TextNode) node;
// Returns the text of the node
System.out.println("text.getText():" + text.getText());
}
if (node instanceof RemarkNode)
{
// The remark tag is identified and represented by this class.
RemarkNode remark = (RemarkNode) node;
System.out.println("remark.getText():" + remark.getText());
}
else if (node instanceof TagNode)
{
//TagNode代表了一个通用的标签。
//如果没有扫描仪对给定的标签名称,这是你所得到的东西。
//这也是所有标签的基类所造成的分析器。
TagNode tag = (TagNode) node;
// do whatever processing you want with the tag itself
// ...
// process recursively (nodes within nodes) via
// getChildren()
System.out.println("tag.getText:"+tag.getText());
NodeList nl = tag.getChildren();
if (null != nl)
for (NodeIterator i = nl.elements(); i.hasMoreNodes();)
processMyNodes(i.nextNode());
}
}