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 的主要功能如下:
- 从一个 URL,文件或字符串中解析 HTML;
- 使用 DOM 或 CSS 选择器来查找、取出数据;
- 可操作 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 即可