經常使用的路勁表達式:html
表達式 | 描述 | 實例 | |
nodename | 選取nodename節點的全部子節點 | xpath('//div') | 選取了div節點的全部子節點 |
/ | 從根節點選取 | xpath('/div') | 從根節點上選取div節點 |
// | 選取全部的當前節點,不考慮他們的位置 | xpath('//div') | 選取全部的div節點 |
. | 選取當前節點 | xpath('./div') | 選取當前節點下的div節點 |
.. | 選取當前節點的父節點 | xpath('..') | 回到上一個節點 |
@ | 選取屬性 | xpath('//@calss') | 選取全部的class屬性 |
謂語被嵌在方括號內,用來查找某個特定的節點或包含某個制定的值的節點node
實例:scrapy
表達式 | 結果 |
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節點 |
使用「|」運算符能夠選取多個路徑spa
表達式 | 結果 |
xpath('//div|//table') | 選取全部的div和table節點 |
軸能夠定義相對於當前節點的節點集.net
軸名稱 | 表達式 | 描述 |
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-sibling::*') | 選取當前節點以後的兄弟節點 |
parent | xpath('./parent::*') | 選取當前節點的父節點 |
preceding | xpath('./preceding::*') | 選取文檔中當前節點開始標籤前的全部節點 |
preceding-sibling | xpath('./preceding-sibling::*') | 選取當前節點以前的兄弟節點 |
self | xpath('./self::*') | 選取當前節點 |
使用功能函數可以更好的進行模糊搜索htm
函數 | 用法 | 解釋 |
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 文檔