jsoup 的過人之處——選擇器html
前面咱們已經簡單的介紹了 jsoup 是如何使用選擇器來對元素進行檢索的。本節咱們把重點放在選擇器自己強大的語法上。下表是 jsoup 選擇器的全部語法詳細列表。正則表達式
表 2. 基本用法:code
<!-- lang: html --> tagname 使用標籤名來定位,例如 a ns|tag 使用命名空間的標籤訂位,例如 fb:name 來查找 <fb:name> 元素 #id 使用元素 id 定位,例如 #logo .class 使用元素的 class 屬性定位,例如 .head [attribute] 使用元素的屬性進行定位,例如 [href] 表示檢索具備 href 屬性的全部元素 [^attr] 使用元素的屬性名前綴進行定位,例如 [^data-] 用來查找 HTML5 的 dataset 屬性 [attr=value] 使用屬性值進行定位,例如 [width=500] 定位全部 width 屬性值爲 500 的元素 [attr^=value], [attr$=value], [attr*=value] 這三個語法分別表明,屬性以 value 開頭、結尾以及包含 [attr~=regex] 使用正則表達式進行屬性值的過濾,例如 img[src~=(?i)\.(png|jpe?g)] * 定位全部元素
以上是最基本的選擇器語法,這些語法也能夠組合起來使用,下面是 jsoup 支持的組合用法:orm
表 3:組合用法:htm
<!-- lang: html --> el#id 定位 id 值某個元素,例如 a#logo -> <a id=logo href= … > el.class 定位 class 爲指定值的元素,例如 div.head -> <div class=head>xxxx</div> el[attr] 定位全部定義了某屬性的元素,例如 a[href] 以上三個任意組合 例如 a[href]#logo 、a[name].outerlink ancestor child 這五種都是元素之間組合關係的選擇器語法,其中包括父子關係、合併關係和層次關係。 parent > child siblingA + siblingB siblingA ~ siblingX el, el, el
除了一些基本的語法以及這些語法進行組合外,jsoup 還支持使用表達式進行元素過濾選擇。下面是 jsoup 支持的全部表達式一覽表:input
表 4. 表達式:form
<!-- lang: html --> :lt(n) 例如 td:lt(3) 表示 小於三列 :gt(n) div p:gt(2) 表示 div 中包含 2 個以上的 p :eq(n) form input:eq(1) 表示只包含一個 input 的表單 :has(seletor) div:has(p) 表示包含了 p 元素的 div :not(selector) div:not(.logo) 表示不包含 class=logo 元素的全部 div 列表 :contains(text) 包含某文本的元素,不區分大小寫,例如 p:contains(oschina) :containsOwn(text) 文本信息徹底等於指定條件的過濾 :matches(regex) 使用正則表達式進行文本過濾:div:matches((?i)login) :matchesOwn(regex) 使用正則表達式找到自身的文本