爬蟲--xpath詳解

爬蟲應用:

基於python的requests+lxml,lxml中有xpath語法,功能強大,定位準確

Xpath用法:

在 XPath 中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、註釋以及文檔(根)節點。XML 文檔是被作爲節點樹來對待的;

表達式 描述
nodename 選取此節點的所有子節點
/ 從根節點選取,一層一層篩選
// 文檔任何位置都能找到文檔中的節點,遞歸篩選
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性

謂語:

路徑表達式 結果
//div/a[1] 選取屬於div子元素下的a標籤的第一個
//div/a[last()] 選取屬於div下子元素的a標籤的最後一個
//div/a[last()-1] 選取屬於div下子元素的a標籤的倒數第二個
//div/a[position()<3] 選取最前面兩個屬於div元素的子元素的a標籤
//div[@lang='eng'] 屬性選取,一般有class,id,自定義屬性
//div/a[price>35.00] 選取div下的a標籤的price大於35

選取未知節點:

* 匹配任何元素節點

@*匹配任何屬性節點

node()匹配任何類型的節點

路徑表達式 結果
/bookstore/* 選取 bookstore 元素的所有子元素。
//* 選取文檔中的所有元素。
//title[@*] 選取所有帶有屬性的 title 元素。

選取若干路徑
通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。

//book/title | //book/price 選取 book 元素的所有 title 和 price 元素。
//title | //price 選取文檔中的所有 title 和 price 元素。
/bookstore/book/title | //price 選取屬於 bookstore 元素的 book 元素的所有 title 元素,以及文檔中所有的 price 元素。
三、軸
軸可定義相對於當前節點的節點集;

軸名稱 結果
ancestor 選取當前節點的所有先輩(父、祖父等)。
ancestor-or-self 選取當前節點的所有先輩(父、祖父等)以及當前節點本身。
attribute 選取當前節點的所有屬性
child 選取當前節點的所有子元素
descendant 選取當前節點的所有後代元素(子、孫等)
descendant-or-self 選取當前節點的所有後代元素(子、孫等)以及當前節點本身
following 選取文檔中當前節點的結束標籤之後的所有節點
namespace 選取當前節點的所有命名空間節點
parent 選取當前節點的父節點
preceding 選取文檔中當前節點的開始標籤之前的所有節點
preceding-sibling 選取當前節點之前的所有同級節點
self 選取當前節點

例子:

例子   結果
child::book  選取所有屬於當前節點的子元素的 book 節點
attribute::lang 選取當前節點的 lang 屬性
child::* 選取當前節點的所有子元素
attribute::* 選取當前節點的所有屬性
child::text() 選取當前節點的所有文本子節點
child::node() 選取當前節點的所有子節點
descendant::book 選取當前節點的所有 book 後代
ancestor::book 選擇當前節點的所有 book 先輩
ancestor-or-self::book 選取當前節點的所有 book 先輩以及當前節點(如果此節點是 book 節點)
child::*/child::price 選取當前節點的所有 price 孫節點


四、一些函數
1. starts-with函數
獲取以xxx開頭的元素 
例子:xpath(‘//div[stars-with(@class,”test”)]’)

2 contains函數
獲取包含xxx的元素 
例子:xpath(‘//div[contains(@id,”test”)]’)

3 and
與的關係 
例子:xpath(‘//div[contains(@id,”test”) and contains(@id,”title”)]’)

4 text()函數
例子1:xpath(‘//div[contains(text(),”test”)]’) 
例子2:xpath(‘//div[@id=”“test]/text()’)

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