Jsoup 介绍

22 篇文章 0 订阅
19 篇文章 0 订阅

 

http://womendu.iteye.com/blog/867363

今天给大家介绍一款强大的,方便的,基于Java的Html parser — Jsoup。相比于大家熟悉的HtmlParser,Jsoup显得更强大,更易用。如果你使用过Jquery的选择器,那么当你使用Jsoup时,你会感到是那么的亲切…

Jsoup是一个方便于操作HTML的开源的java类库,基于MIT协议发布。其提供的API能够非常方便的从HTML中提出和处理数据,对HTML DOM的操作提供了类似于JQuery的方法。

解析来,我们实际看看Jsoup是怎么对HTML进行遍历和解析的吧。

解析出Document

1
2
3
String html = "<html><head><title>First parse</title></head>"
     + "<body><p>Parsed HTML into a doc.</p></body></html>" ;
Document doc = Jsoup.parse(html);

其返回的Document对象就是Jsoup定义的文档模型,包含了Elements和TextNodes.当然Document也可以认为是一个特殊的Element,因为其本身就是继承自Element.

解析HTML片段

当你有一段HTML片段需要解析,例如一个DIV包含着多个P元素,那么你可以使用下面的方法:

1
2
3
String html = "<div><p>Lorem ipsum.</p>" ;
Document doc = Jsoup.parseBodyFragment(html);
Element body = doc.body();

上面的doc其实对应:

1
< html > < head ></ head > < body >  < div >   < p >Lorem ipsum.</ p >  </ div > </ body ></ html >

body为:

1
<body> <div>  <p>Lorem ipsum.</p> </div></body>

从一个URL装载一个Document
你能够方便的从一个web页面获取并解析其HTML,参考代码:

1
2
Document doc = Jsoup.connect( "http://example.com/ " ).get();
String title = doc.title();

connect(String url)方法创建了一个Connection对象,get()方法获取并解析html文档。
Connection接口还提供了下面一些方法:

1
2
3
4
5
6
Document doc = Jsoup.connect( "http://example.com " )
   .data( "query" , "Java" )
   .userAgent( "Mozilla" )
   .cookie( "auth" , "token" )
   .timeout( 3000 )
   .post();


从一个文件装载Document
你可以从本地文件加载并解析HTML,参考代码:

1
2
File input = new File( "/tmp/input.html" );
Document doc = Jsoup.parse(input, "UTF-8" , "http://example.com/ " );

parse(File in, String charsetName, String baseUri) 会抛出IOException。baseUri参数是用来在解析html过程中,如果遇到相对路径的链接时,能够加上去成为绝对路径。

使用提供的DOM操作方法浏览Document
废话不说,看代码:

1
2
3
4
5
6
7
8
9
File input = new File( "/tmp/input.html" );
Document doc = Jsoup.parse(input, "UTF-8" , "http://example.com/ " );
 
Element content = doc.getElementById( "content" );
Elements links = content.getElementsByTag( "a" );
for (Element link : links) {
   String linkHref = link.attr( "href" );
   String linkText = link.text();
}

很清楚吧,是不是很像JS?
总结一下Jsoup提供的方法:
获取元素的有:
getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key)
siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()
parent(), children(), child(int index)
获取元素数据:
attr(String key) 获取属性
attr(String key, String value) 设置属性
attributes() 获取所有属性
id(), className() and classNames()
text() 获取文字内容
text(String value) 设置文字内容
html() 获取html内容
html(String value) 设置html内容
outerHtml()
data() 获取类似script,style的数据内容
tag() and tagName()
操作HTML内容:
append(String html), prepend(String html)
appendText(String text), prependText(String text)
appendElement(String tagName), prependElement(String tagName)
html(String value)

使用选择器语法来获取元素
如果你用过jQuery,这一段代码你绝对不会陌生:

1
2
3
4
5
6
7
8
9
10
11
File input = new File( "/tmp/input.html" );
Document doc = Jsoup.parse(input, "UTF-8" , "http://example.com/ " );
 
Elements links = doc.select( "a[href]" ); // a with href
Elements pngs = doc.select( "img[src$=.png]" );
   // img with src ending .png
 
Element masthead = doc.select( "div.masthead" ).first();
   // div with class=masthead
 
Elements resultLinks = doc.select( "h3.r > a" ); // direct a after h3

Jsoup支持的选择器一览:
tagname: 根据tabname获取元素
ns|tag: ns为命名空间下面选择tagname为tag的元素
#id: 根据ID获取元素
.class: 根据class获取元素
[attribute]: 根据指定的属性获取元素
[^attr]: 根据以attr开头的属性获取元素
[attr=value]: 指定属性值的元素
[attr=~regex]: 根据属性值匹配正则表达式获取元素
*: 匹配所以元素
当然,选择器还可以混合使用:
el#id:
el.class:
el[attr]:
ancestor child:
parent > child:
siblingA + siblingB:
siblingA ~ siblingX:
el, el, el:
还有伪选择器:
el:lt(n):
el:gt(n):
el:eq(n):
el:has(seletor):
el:contains(text):
el:containsOwn(text):
el:matches(regex):
el:matchesOwn(regex):

当然,Jsoup还有一些没总结到的方法,下次再记录吧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值