您好,登錄后才能下訂單哦!
Xpath簡介
XPath即為XML路徑語言,它是一種用來確定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath基于XML的樹狀結構,有不同類型的節點,包括元素節點,屬性節點和文本節點,提供在數據結構樹中找尋節點的能力。起初 XPath 的提出的初衷是將其作為一個通用的、介于XPointer與XSLT間的語法模型。但是 XPath 很快的被開發者采用來當作小型查詢語言。
簡單來說我們通過Xpath可以獲取XML中的指定元素和指定節點的值。在網絡爬蟲中我們通過會把爬蟲獲取的HTML數據轉換成XML結構,然后通過XPath解析,獲取我們想要的結果。
接下來為大家分享以下xpath的表達式以及用法。
一.選取節點
Xpath使用路徑表達式在XML文檔中選取節點。節點是通過沿著路徑來選取的,通過路徑可以找到我們想要的節點或者節點范圍。
表達式 | 描述 | 用法 | 說明 |
nodename | 選取此節點的所有子節點。 | xpath(‘span’) | 選取span元素的所有子節點 |
/ | 從根節點選取 | xpath(‘/div’) | 從根節點上選取div節點 |
// | 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。 | xpath(‘//div’) | 從當前節點選取含有div節點的標簽 |
. | 選取當前節點 | xpath(‘./div’) | 選取當前節點下的div標簽 |
.. | 選取當前節點的父節點 | xpath(‘../’) | 回到上一級節點 |
@ | 選取屬性 | xpath(“//div[@id=’1001’]”) | 獲取div標簽中,含有ID屬性且值為1001的標簽 |
二.謂語(Predicates)
謂語用來查找某個特定的節點或者包含某個指定的值的節點。
謂語被嵌在方括號中。
表達式描述述 | 用法說明 |
/bookstore/book[1] | 選取屬于 bookstore 子元素的第一個 book 元素。 |
/bookstore/book[last()] | 選取屬于 bookstore 子元素的最后一個 book 元素。 |
/bookstore/book[last()-1] | 選取屬于 bookstore 子元素的倒數第二個 book 元素。 |
/bookstore/book[position()<3] | 選取最前面的兩個屬于 bookstore 元素的子元素的 book 元素。 |
//title[@lang] | 選取所有擁有名為 lang 的屬性的 title 元素。 |
//title[@lang='eng'] | 選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性。 |
/bookstore/book[price>35.00] | 選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大于 35.00。 |
/bookstore/book[price>35.00]/title | 選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大于 35.00。 |
三. 通配符
XPath 通配符可用來選取未知的 XML 元素,通配指定節點。
表達式 | 描述 | 用法 | 說明 |
* | 匹配任何元素節點 | xpath(/div/*) | 選取div下的所有子節點 |
@* | 匹配任何屬性節點 | xpath(/div[@*]) | 選取所有帶屬性的div節點 |
node() | 匹配任何類型的節點 | xpath(//div[@class=’tb_cls’]).node() | 選擇標簽為div且類屬性為tb_cls的所有標簽 |
四.多路徑選擇
通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。
用法 | 說明 |
xpath(//book/title |//book/price) | 選取 book 元素的所有 title 和 price 元素。 |
xpath(//title| //price) | 選取文檔中的所有 title 和 price 元素 |
五.XPath 軸
軸可定義相對于當前節點的節點集。
表達式 | 描述 | 用法 | 說明 |
ancestor | 選取當前節點的所有先輩(父、祖父等) | xpath(//div[@id=’123’]/ancestor::*) | 選擇標簽為div且ID號為123的所有先輩標簽 |
ancestor-or-self | 選取當前節點的所有先輩(父、祖父等)以及當前節點本身 | xpath(//div[@id=’123’]/ancestor-or-self::*) | 選擇標簽為div且ID號為123的所有先輩標簽且包含自己 |
attribute | 選取當前節點的所有屬性 | xpath(//div[@id=’123’]/attribute::class) | 選擇標簽為div且ID號為123的類屬性名稱 |
child | 選取當前節點的所有子元素 | xpath(//div[@id=’123’]/child::book) | 選擇標簽為div且ID號為123的所有子元素的為book 節點 |
descendant | 選取當前節點的所有后代元素(子、孫等) | xpath(./descendant::*) | 返回當前節點的所有后代節點(子節點、孫節點) |
following | 選取文檔中當前節點結束標簽后的所有節點 | xpath(./following::*) | 選取文檔中當前節點結束標簽后的所有節點 |
parent | 選取當前節點的父節點 | xpath(./parent::*) | 選取當前節點的父節點 |
preceding | 選取文檔中當前節點的開始標簽之前的所有節點 | xpath(//div[@id=’123’]/preceding::*) | 選擇標簽為div且ID號為123的開始標簽之前的所有節點 |
preceding-sibling | 選取當前節點之前的所有同級節點 | xpath(//div[@id=’123’]/preceding-sibling::*) | 選擇標簽為div且ID號為123的之前的所有同級節點 |
self | 選取當前節點 | xpath(./self::*) | 選取當前節點 |
六.XPath 運算符
表達式 | 描述 | 用法 | 說明 |
+ | 加法 | 6 + 4 | 10 |
- | 減法 | 6 – 4 | 2 |
* | 乘法 | 6 * 4 | 24 |
div | 除法 | 8 div 4 | 2 |
= | 等于 | price=9.80 | 如果 price 是 9.80,則返回 true。如果 price 是 9.90,則返回 false。 |
!= | 不等于 | price!=9.80 | 如果 price 是 9.90,則返回 true。如果 price 是 9.80,則返回 false。 |
<3 | 小于 | price<9.80 | 如果 price 是 9.00,則返回 true。如果 price 是 9.90,則返回 false。 |
<= | 小于或等于 | price<=9.80 | 如果 price 是 9.00,則返回 true。如果 price 是 9.90,則返回 false。 |
> | 大于 | price>9.80 | 如果 price 是 9.90,則返回 true。如果 price 是 9.80,則返回 false。 |
>= | 大于或等于 | price>=9.80 | 如果 price 是 9.90,則返回 true。如果 price 是 9.70,則返回 false。 |
or | 或 | price=9.80 or price=9.70 | 如果 price 是 9.80,則返回 true。如果 price 是 9.50,則返回 false。 |
and | 與 | price>9.00 and price<9.90 | 如果 price 是 9.80,則返回 true。如果 price 是 8.50,則返回 false。 |
mod | 計算除法的余數 | 5 mod 2 | 1 |
七.常用的功能函數
使用功能函數能夠更好的進行模糊搜索
表達式 | 描述 | 用法 | 說明 |
starts-with | 選取id值以ma開頭的div節點 | xpath(‘//div[starts-with(@id,”ma”)]‘) | 選取id值以ma開頭的div節點 |
contains | 選取id值包含ma的div節點 | xpath(‘//div[contains(@id,”ma”)]‘) | 選取id值包含ma的div節點 |
and | 選取id值包含ma和in的div節點 | xpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘) | 選取id值包含ma和in的div節點 |
text() | 選取節點文本包含ma的div節點 | xpath(‘//div[contains(text(),”ma”)]‘) | 選取節點文本包含ma的div節點 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。