Jsoup文件--提取資料(使用選擇器語法查詢元素)
阿新 • • 發佈:2018-12-13
使用選擇器語法查詢元素
問題
想要使用類似於CSS或jQuery的選擇器語法查詢和操作元素。
解決方案
使用Element.select(String selector)
和Elements.select(String selector)
方法:
File input = new File("/temp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Elements links = doc.select("a[href]"); Elements pngs = doc.select("img[src$=.png]"); Element masthead = doc.select("div.masthead").first(); Elements resultLinks = doc.select("h3.r > a");
描述
jsoup elements物件支援類似於CSS或jQuery的選擇器語法來查詢匹配的元素,允許非常強大和健壯的查詢。
select
方法可以被使用到Document
、Element
或Elements
物件中,它是上下文相關的,所以可以用來過濾出指定元素,或是鏈式呼叫進行選擇元素。
select
返回Elements集合,並提供一系列方法來提取和操作資料。
Selector概述
tagname
: 通過標籤來查詢元素,e.g.a
、p
ns|tag
: 通過名稱空間下標籤查詢元素,e.g. 使用fb|name
來查詢<fb:name>
元素#id
: 通過ID查詢元素,e.g.#logo
.class
: 通過class名稱查詢元素,e.g..masthead
[attribute]
: 利用屬性查詢元素,e.g.[href]
[^attr]
: 利用屬性名字首來查詢元素,e.g. 使用[^data-]
來查詢帶有HTML5 Dataset屬性的元素[attr=value]
: 利用屬性值來查詢元素,e.g.[width=500]
[attr^=value]
,[attr$=value]
,[attr*=value]
: 利用匹配屬性值開頭、結尾或包含屬性值來查詢元素,e.g.[href*=/path/]
[attr~=regex]
: 利用屬性值匹配正則表示式來查詢元素,e.g.img[src~=(?i)\.(png|jpe?g)]
*
: 這個符號將匹配所有元素
組合選擇器
el#id
: 元素+ID, e.g.div#logo
el.class
: 元素+class, e.g.div.masthead
el[attr]
: 元素+屬性名稱, e.g.a[href]
- 任意組合,e.g.
a[href].highlight
ancestor child
: 祖先元素下的所有子元素, e.g..body p
查詢p
有body
樣式的元素下的所有p
元素parent > child
: 父級元素下的所有直接子元素(一級子元素), e.g.div.content > p
查詢div
下的所有p
元素;body > *
body
下的所有直接子元素(一級子元素)siblingA + siblingB
: 查詢A元素之前的第一個同級B元素,e.g.div.head + div
siblingA ~ siblingX
: 查詢A元素之前的同級X元素,e.g.h1 ~ p
el, el, el
: 多選擇器,查詢匹配任一選擇器的元素,e.g.div.masthead, div.logo
偽類選擇器
:lt(n)
: 查詢索引值 (i.e. 位於DOM樹中相對於其父級元素的位置)小於n
的同級元素,e.g.td:lt(3)
:gt(n)
:查詢索引值大於n
的同級元素,e.g.div p:gt(2)
:eq(n)
: 查詢索引值等於n
的同級元素,e.g.form input:eq(1)
:has(selector)
: 查詢包含‘指定選擇器匹配到元素’的元素,e.g.div:has(p)
:not(selector)
: 查詢與指定選擇器不匹配的元素,e.g.div:not(.logo)
:contains(text)
: 查詢包含給定文字的元素,搜尋時對大小寫不敏感,e.g.p:contains(jsoup)
:containsOwn(text)
: 查詢直接包含(即元素本身包含而不包括子類元素)給定文字的元素:matches(regex)
: 查詢包含與指定正則表示式相匹配文字的元素,e.g.div:matches((?i)login)
:matchesOwn(regex)
: 查詢直接包含(即元素本身包含而不包括子類元素)與指定正則表示式相匹配文字的元素,- 注意:上述偽類選擇器中的索引是從0開始的,第一個元素的索引是0,第二個元素的索引是1,以此類推…
可以參閱
Selector API
來檢視完整的支援列表和詳細資訊。