網絡爬蟲基礎-Xpath語法(一)

前言

這一章節主要講解Xpath的基礎語法,學習如何通過Xpath獲取網頁中我們想要的內容;爲我們的後面學習Java網絡爬蟲基礎準備工作。

備註:此章節爲基礎核心章節,未來會在網絡爬蟲的數據解析環節經常使用,學會Xpath解析語法,可爲未來爬蟲解析省去很多麻煩。

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。

<

小於

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節點

總結

  本文章向您介紹了爲什麼要學習Xpath、Xpath簡介以及Xpath的基礎語法;接下來您可以嘗試通過編寫代碼來熟悉使用xpath表達式;同時我將會在下一章節(公衆號:DT數據技術博文)爲大家介紹,如何通過Xpath表達式來解析我們的爬蟲數據。

 

 

(ID:DT數據技術博文)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章