解析HTML之jsoup 理论篇

参考:

http://baike.baidu.com/link?url=xxxbb5JAKswcoH2q286WG1lgA3Q6O5HBrxs9eeKvVmQnRi9BjqPcBHbKaZwkPkOnWYDnQQH_TlwzkhEPOrBHxq


jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。

在使用jsoup解析html之前,有必要对html的dom结构进行一个了解。因为在jsoup中定义了例如Node、Element、Document等这样的类,你必须清楚这些类所代表的含义。下面是jsoup中org.jsoup.nodes这个包的类层次图:

Hierarchy-For-Package org.jsoup.nodes

节点(Node)

Node是最基本的,抽象的结点模型。Elements, Documents, Comments等都是 Node 的实例(或子类).根据 DOM,HTML 文档中的每个成分都是一个节点。

DOM 是这样规定的:

  • 整个文档是一个文档节点
  • 每个 HTML 标签是一个元素节点
  • 包含在 HTML 元素中的文本是文本节点
  • 每一个 HTML 属性是一个属性节点
  • 注释属于注释节点

Node 层次

节点彼此都有等级关系。

HTML 文档中的所有节点组成了一个文档树(或节点树)。HTML 文档中的每个元素、属性、文本等都代表着树中的一个节点。树起始于文档节点,并由此继续伸出枝条,直到处于这棵树最低级别的所有文本节点为止。

html-dom-structure

html-dom-structure

 
 
  1. <html>
  2. <head>
  3. <title> DOM Tutorial </title>
  4. </head>
  5. <body>
  6. <h1> DOM Lesson one </h1>
  7. <p> Hello world! </p>
  8. </body>
  9. </html>

上面所有的节点彼此间都存在关系

除文档节点之外的每个节点都有父节点。举例, <head> 和 <body> 的父节点是 <html> 节点,文本节点 “Hello world!” 的父节点是 <p> 节点。

大部分元素节点都有子节点。比方说,<head> 节点有一个子节点: <title> 节点。 <title> 节点也有一个子节点:文本节点 “DOM Tutorial”。

当节点分享同一个父节点时,它们就是同辈(同级节点)。比方说,<h1> 和 <p> 是同辈,因为它们的父节点均是 <body> 节点。

节点也可以拥有后代,后代指某个节点的所有子节点,或者这些子节点的子节点,以此类推。比方说,所有的文本节点都是 <html> 节点的后代,而第一个文本节点是 <head> 节点的后代。

节点也可以拥有先辈。先辈是某个节点的父节点,或者父节点的父节点,以此类推。比方说,所有的文本节点都可把 <html> 节点作为先辈节点。

Element

一个HTML元素(Element)包含一个标记名称,属性和子节点(包括文本节点和其他元素)。从一个元素(Element)中,你可以提取数据,遍历节点图,以及操纵HTML。jsoup中的Element类提供了若干种方法来查找您希望操作的元素。

  • getAllElements() 返回所有的元素,包括元素的子元素,以及子元素的子元素
  • getElementById(String id) 根据元素的ID查找元素
  • getElementsByAttribute(String key) 根据属性名查找元素
  • getElementsByAttributeValue(String key, String value) 根据属性键值对查代元素
  • getElementsByClass(String className) 根据css的class查找元素
  • getElementsByTag(String tagName) 根据标签名称查找元素
 
 
  1. <div id="imgDiv" class="imgClass">
  2. <a href="#">
  3. <img src="http://xxxx.xx/xx.jpg"/>
  4. </a>
  5. </div>

在上面的例子中,我们就可以使用getElementsByTag(“img”)获取到<img src="http://xxxx.xx/xx.jpg"/>

同样的,可以使用getElementById(“imgDiv”)和getElementsByClass(“imgClass”)获取到整个dom文档。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值