Python爬蟲:Xpath語法筆記

發表於2016-04-02

一、選取節點
常用的路勁表示式:

表示式 描述 例項
nodename 選取nodename節點的所有子節點
xpath(‘//div’)
選取了div節點的所有子節點
/ 從根節點選取 xpath(‘/div’) 從根節點上選取div節點
// 選取所有的當前節點,不考慮他們的位置
xpath(‘//div’) 選取所有的div節點
. 選取當前節點 xpath(‘./div’)
選取當前節點下的div節點
.. 選取當前節點的父節點
xpath(‘..’) 回到上一個節點
@ 選取屬性
xpath(’//@calss’)
選取所有的class屬性

二、謂語

謂語被嵌在方括號內,用來查詢某個特定的節點或包含某個制定的值的節點

例項:

 

表示式 結果
xpath(‘/body/div[1]’)
選取body下的第一個div節點
xpath(‘/body/div[last()]’)
選取body下最後一個div節點
xpath(‘/body/div[last()-1]’) 選取body下倒數第二個div節點
xpath(‘/body/div[positon()<3]’) 選取body下前兩個div節點
xpath(‘/body/div[@class]’) 選取body下帶有class屬性的div節點
xpath(‘/body/div[@class=”main”]’) 選取body下class屬性為main的div節點
xpath(‘/body/div[price>35.00]’) 選取body下price元素值大於35的div節點

 三、萬用字元

Xpath通過萬用字元來選取未知的XML元素

表示式 結果
xpath(’/div/*’)
選取div下的所有子節點
xpath(‘/div[@*]’)
選取所有帶屬性的div節點

 四、取多個路徑

使用“|”運算子可以選取多個路徑

表示式 結果
xpath(‘//div|//table’)
選取所有的div和table節點

五、Xpath軸

軸可以定義相對於當前節點的節點集

軸名稱 表示式 描述
ancestor
xpath(‘./ancestor::*’) 選取當前節點的所有先輩節點(父、祖父)
ancestor-or-self xpath(‘./ancestor-or-self::*’) 選取當前節點的所有先輩節點以及節點本身
attribute xpath(‘./attribute::*’) 選取當前節點的所有屬性
child xpath(‘./child::*’) 返回當前節點的所有子節點
descendant xpath(‘./descendant::*’) 返回當前節點的所有後代節點(子節點、孫節點)
following xpath(‘./following::*’) 選取文件中當前節點結束標籤後的所有節點
following-sibing xpath(‘./following-sibing::*’) 選取當前節點之後的兄弟節點
parent xpath(‘./parent::*’) 選取當前節點的父節點
preceding xpath(‘./preceding::*’) 選取文件中當前節點開始標籤前的所有節點

 

preceding-sibling xpath(‘./preceding-sibling::*’) 選取當前節點之前的兄弟節點
self xpath(‘./self::*’) 選取當前節點

 

六、功能函式   

使用功能函式能夠更好的進行模糊搜尋

函式 用法 解釋
starts-with xpath(‘//div[starts-with(@id,”ma”)]) 選取id值以ma開頭的div節點
contains
xpath(‘//div[contains(@id,”ma”)]) 選取id值包含ma的div節點
and
xpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘) 選取id值包含ma和in的div節點
text() xpath(‘//div[contains(text(),”ma”)]‘) 選取節點文字包含ma的div節點

scrapy xpath文件:http://doc.scrapy.org/en/0.14/topics/selectors.html

相關文章