jsoup提供了另一種解析html的方法

就是利用selector, 非常靈活, 還可以下條件組合

介紹如下

 

1. 官網https://jsoup.org/cookbook/extracting-data/selector-syntax

01.png

 

2. 舉個例子

和DOM的方法只差在用select是用String來輸入名稱

語法: Jsoup.parse(Html來源).select(條件)

範例如下

  String html = "<html><head><title>First parse</title></head>"
      + "<body>"
      + "<p>Line 1.</p>"
      + "<p>Line 2.</p>"
      + "<p>Line 3.</p>"
      + "</body></html>";
  Document doc = Jsoup.parse(html);
    
  Elements contents = doc.select("p");
  for (Element content : contents) {
    System.out.println(content.text());
  }

02.png

 

3. Selector概述
tagname : 用tag找元素,比如:a
ns|tag : 用tag在命名空間的元素,比如:用  fb|name 語法來找  <fb:name> 元素
#id : 用id找元素,比如:#logo
.class : 用class名稱找元素,比如:.masthead
[attribute] : 用屬性找元素,比如:[href]
[^attr] : 用屬性名前綴來找元素,比如:可以用[^data-] 來找有HTML5 Dataset屬性的元素
[attr=value] : 用屬性值來找元素,比如:[width=500]
[attr^=value], [attr$=value], [attr*=value] : 用匹配屬性值開頭、結尾或包含屬性值來找元素,比如:[href*=/path/]
[attr~=regex] : 用屬性值匹配正則表達式來找元素,比如: img[src~=(?i)\.(png|jpe?g)]
*: 這個符號將匹配所有元素

03.png

 

4. Selector組合
el#id: 元素+ID,比如: div#logo
el.class: 元素+class,比如: div.masthead
el[attr]: 元素+class,比如: a[href]
任意組合,比如:a[href].highlight
ancestor child: 找某個元素下子元素,比如:可以用.body p 查找在"body"元素下的所有  p元素
parent > child: 找某個父元素下的直接子元素,比如:可以用div.content > p 查找  p 元素,也可用body > * 找body標籤下所有直接子元素
siblingA + siblingB: 找A元素之前第一個同級元素B,比如:div.head + div
siblingA ~ siblingX: 找A元素之前的同級X元素,比如:h1 ~ p
el, el, el:多個selector組合,找匹配任一selector的唯一元素,例如:div.masthead, div.logo

04.png

 

5. 偽selectors
:lt(n): 找哪些元素的同級索引值(它的位置在DOM樹中是相對於它的父節點)小於n,比如:td:lt(3) 表示小於三列的元素
:gt(n): 找哪些元素的同級索引值大於n,比如:  div p:gt(2)表示哪些div中有包含2個以上的p元素
:eq(n): 找哪些元素的同級索引值與n相等,比如:form input:eq(1)表示包含一個input標籤的Form元素
:has(seletor): 找符合選擇器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素
:not(selector): 找與選擇器不符合的元素,比如:  div:not(.logo) 表示不包含class="logo"元素的所有div列表
:contains(text): 找包含特定內容的元素,不區分大不寫,比如: p:contains(jsoup)
:containsOwn(text): 找包含特定內容的元素
:matches(regex): 找內容符合條件式的元素,比如:div:matches((?i)login)
:matchesOwn(regex): 找自身包含條件式的元素
注意:Selectors的index是從0開始,也就是說第一個元素索引值為0,第二個元素index為1

05.png

 

6. 最後用法可以參考其他的網頁http://www.cnblogs.com/xiaoMzjm/p/3899366.html

06.png  

arrow
arrow

    RX1226 發表在 痞客邦 留言(0) 人氣()