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

转载于:https://my.oschina.net/u/1244232/blog/161875

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值