Jsoup 之入门

1、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 的主要功能如下:

  1. 从一个 URL,文件或字符串中解析 HTML;
  2. 使用 DOM 或 CSS 选择器来查找、取出数据;
  3. 可操作 HTML 元素、属性、文本;
    jsoup 是基于 MIT 协议发布的,可放心使用于商业项目。

Jsoup的代码相当简洁,Jsoup总共53个类,且没有任何第三方包的依赖,对比最终发行包9.8M的SAXON,实在算得上是短小精悍了。

jsoup
├── examples #样例,包括一个将html转为纯文本和一个抽取所有链接地址的例子。    
├── helper #一些工具类,包括读取数据、处理连接以及字符串转换的工具
├── nodes #DOM节点定义
├── parser #解析html并转换为DOM树
├── safety #安全相关,包括白名单及html过滤
└── select #选择器,支持CSS Selector以及NodeVisitor格式的遍历

2、Jsoup 使用:

下面先写一个简单的示例程序开始 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 的代码:

public class MyNodeVisitor implements NodeVisitor {

@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 即可

你可能感兴趣的:(遍历Dom树,Jsoup使用)