一、選取節(jié)點(diǎn)
常用的路勁表達(dá)式:
| 表達(dá)式 | 描述 | 實(shí)例 | 注釋 |
|---|---|---|---|
| nodename | 選取nodename節(jié)點(diǎn)的所有子節(jié)點(diǎn) | xpath(‘//div’) | 選取了div節(jié)點(diǎn)的所有子節(jié)點(diǎn) |
| / | 從根節(jié)點(diǎn)選取 | xpath(‘/div’) | 從根節(jié)點(diǎn)上選取div節(jié)點(diǎn) |
| // | 選取所有的當(dāng)前節(jié)點(diǎn),不考慮他們的位置 | xpath(‘//div’) | 選取所有的div節(jié)點(diǎn) |
| . | 選取當(dāng)前節(jié)點(diǎn) | xpath(‘./div’) | 選取當(dāng)前節(jié)點(diǎn)下的div節(jié)點(diǎn) |
| .. | 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) | xpath(‘..’) | 回到上一個(gè)節(jié)點(diǎn) |
| @ | 選取屬性 | xpath(’//@calss’) | 選取所有的class屬性 |
二、謂語
謂語被嵌在方括號內(nèi),用來查找某個(gè)特定的節(jié)點(diǎn)或包含某個(gè)指定的值的節(jié)點(diǎn)
|表達(dá)式| 結(jié)果|
|---| -- -|
|xpath(‘/body/div[1]’)|選取body下的第一個(gè)div節(jié)點(diǎn)|
|xpath(‘/body/div[last()]’)|選取body下最后一個(gè)div節(jié)點(diǎn)|
|xpath(‘/body/div[last()-1]’) |選取body下倒數(shù)第二個(gè)div節(jié)點(diǎn)
|xpath(‘/body/div[positon()<3]’) |選取body下前兩個(gè)div節(jié)點(diǎn)
|xpath(‘/body/div[@class]’) |選取body下帶有class屬性的div節(jié)點(diǎn)
|xpath(‘/body/div[@class=”main”]’) |選取body下class屬性為main的div節(jié)點(diǎn)
|xpath(‘/body/div[price>35.00]’|選取body下price元素值大于35的div節(jié)點(diǎn)
三、通配符
Xpath通過通配符來選取未知的XML元素
| 表達(dá)式 | 結(jié)果 |
|---|---|
| xpath(’/div/*’) | 選取div下的所有子節(jié)點(diǎn) |
| xpath(‘/div[@*]’) | 選取所有帶屬性的div節(jié)點(diǎn) |
四、取多個(gè)路徑
使用“|”運(yùn)算符可以選取多個(gè)路徑
| 表達(dá)式 | 結(jié)果 |
|---|---|
| 'xpath(‘//div|//table’)' | 選取所有的div和table節(jié)點(diǎn) |
五、Xpath軸
軸可以定義相對于當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)集
| 軸名稱 | 表達(dá)式 | 描述 |
|---|---|---|
| ancestor | xpath(‘./ancestor::*’) | 選取當(dāng)前節(jié)點(diǎn)的所有先輩節(jié)點(diǎn)(父、祖父) |
| ancestor-or-self | xpath(‘./ancestor-or-self::*’) | 選取當(dāng)前節(jié)點(diǎn)的所有先輩節(jié)點(diǎn)以及節(jié)點(diǎn)本身 |
| attribute | xpath(‘./attribute::*’) | 選取當(dāng)前節(jié)點(diǎn)的所有屬性 |
| child | xpath(‘./child::*’) | 返回當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn) |
| descendant | xpath(‘./descendant::*’) | 返回當(dāng)前節(jié)點(diǎn)的所有后代節(jié)點(diǎn)(子節(jié)點(diǎn)、孫節(jié)點(diǎn)) |
| following | xpath(‘./following::*’) | 選取文檔中當(dāng)前節(jié)點(diǎn)結(jié)束標(biāo)簽后的所有節(jié)點(diǎn) |
| following-sibing | xpath(‘./following-sibing::*’) | 選取當(dāng)前節(jié)點(diǎn)之后的兄弟節(jié)點(diǎn) |
| parent | xpath(‘./parent::*’) | 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn) |
| preceding | xpath(‘./preceding::*’) | 選取文檔中當(dāng)前節(jié)點(diǎn)開始標(biāo)簽前的所有節(jié)點(diǎn) |
scrapy xpath文檔:http://doc.scrapy.org/en/0.14/topics/selectors.html