天天看點

【Java】Jsoup使用選擇器文法來查找元素

問題

你想使用類似于CSS或jQuery的文法來查找和操作元素。

方法

可以使用方法實作:Element.select(String selector)

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

Elements links = doc.select("a[href]"); //帶有href屬性的a元素
Elements pngs = doc.select("img[src$=.png]");
  //擴充名為.png的圖檔

Element masthead = doc.select("div.masthead").first();
  //class等于masthead的div标簽

Elements resultLinks = doc.select("h3.r > a"); //在h3元素之後的a元素
           

說明

jsoup elements對象支援類似于CSS (或jquery)的選擇器文法,來實作非常強大和靈活的查找功能。.

這個select 方法在Document, Element,或Elements對象中都可以使用。且是上下文相關的,是以可實作指定元素的過濾,或者鍊式選擇通路。

Select方法将傳回一個Elements集合,并提供一組方法來抽取和處理結果。

Selector選擇器概述

  • tagname

    : 通過标簽查找元素,比如:

    a

  • ns|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)]

  • *

    : 這個符号将比對所有元素

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

    :多個選擇器組合,查找比對任一選擇器的唯一進制素,例如:

    div.masthead, div.logo

僞選擇器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)

    : 查找自身包含文本比對指定正規表達式的元素
  • 注意:上述僞選擇器索引是從0開始的,也就是說第一個元素索引值為0,第二個元素index為1等