一、jsoup 简介 部分摘自 http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/ Java 程序在解析 HTML 文档时,相信你们都接触过 htmlparser 这个开源项目,Jsoup 功能比 htmlparser 更增强大,并且代码实现更加简单 jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套很是省力的 API,可经过 DOM,CSS 以及相似于 jQuery 的操做方法来取出和操做数据。 jsoup 的主要功能以下:html
Jsoup的代码至关简洁,Jsoup总共53个类,且没有任何第三方包的依赖,对比最终发行包9.8M的SAXON,实在算得上是短小精悍了。java
jsoup ├── examples #样例,包括一个将html转为纯文本和一个抽取全部连接地址的例子。 ├── helper #一些工具类,包括读取数据、处理链接以及字符串转换的工具 ├── nodes #DOM节点定义 ├── parser #解析html并转换为DOM树 ├── safety #安全相关,包括白名单及html过滤 └── select #选择器,支持CSS Selector以及NodeVisitor格式的遍历
二、Jsoup 使用:node
下面先写一个简单的示例程序开始 Jsoup 的学习之旅:(该例子实现了直接从 url 地址入手 ,经过 Jsoup 解析该 url 网页源代码为一颗 dom 树,而后从这颗树中用 Jsoup 自带的与 JQuery 同样的选择器选择全部网页连接地址,打印出来,最后还增长了一个遍历整棵树的实现)安全
public static void main(String[] args) throws IOException { Validate.isTrue(args.length == 1, "Usage: Supply the url to fetch!"); String url = args[0]; System.out.println("Fetching " + url + "..." ); //fecher the url and parse it to document Document doc = Jsoup.connect(url).get(); //use the same method like JQuery to chose what element you want Elements links = doc.select("a[href]"); System.out.println("\nLinks " + links.size()); //print to see is it work right? for(Element link : links) { System.out.println("* a: " + link.attr("abs:href") + " " + link.text().trim()); } //use give MyNodeVisitor to NodeTraversor NodeTraversor traversor = new NodeTraversor(new MyNodeVisitor()); //traversor to traverse the element what you give traversor.traverse(doc); }
下面给出 MyNodeVisitor 的代码:dom
public class MyNodeVisitor implements NodeVisitor {ide
@Override public void head(Node arg0, int arg1) { // TODO Auto-generated method stub } @Override public void tail(Node arg0, int arg1) { System.out.println(arg0.nodeName() + "--------" + arg1); }
}工具
jsoup 帮助用户实现遍历任何一个给定的 element,遍历过程当中具体作什么事情,则是彻底由用户本身决定,只要实现 NodeVisitor 便可学习