原文標題:《Python網路爬蟲—Scrapy的選擇器Xpath》 對原文有所修改和演繹
優勢
XPath相較於CSS選擇器,可以更方便的選取
- 沒有id class name屬性的標籤
- 屬性或文字特徵不顯著的標籤
- 巢狀層次極其複雜的標籤
XPath路徑
定位方式
/ 絕對路徑 表示從根節點開始選取
// 相對路徑 表示從任意節點開始
基本的節點定位
#查詢html下的body下的form下的所有input節點
/html/body/form/input
#查詢所有input節點
//input
使用萬用字元*
定位
#查詢form節點下的所有節點
//form/*#查詢所有節點//*
#查詢所有input節點(input至少有爺爺輩親戚節點)
//*/input
使用索引定位
#定位 第8個td下的 第2個a節點
//*/td[7]/a[1]
#定位 第8個td下的 第3個span節點
//*/td[7]/span[2]
#定位 最後一個td下的 最後一個a節點
//*/td[last()]/a[last()]
使用屬性
#定位所有包含name屬性的input節點
//input[@name]
#定位含有屬性的所有的input節點
//input[@*]
#定位所有value=2的input節點
//input[@value='2']
#使用多個屬性定位
//input[@value='2'][@id='3']
//input[@value='2' and @id='3']
使用函式定位
函式 | 含義 |
---|---|
contains(,) | 前者中包含後者 |
text() | 獲取節點中的字串 |
starts-with() | 匹配起始位置的字串 |
<a class="menu_hot" href="/ads/auth/promote.html">應用推廣</a>
#定位href屬性中包含“promote.html”的所有a節點
//a[contains(@href,'promote.html')]
#元素內的文字為“應用推廣”的所有a節點
//a[text()='應用推廣']
#href屬性值是以“/ads”開頭的所有a節點
//a[starts-with(@href,'/ads')]
使用XPath軸
這部分類似BeautifulSoup中的sibling、parents、children方法。
軸名稱 | 含義 |
---|---|
ancestor | 選取當前節點的所有先輩節點 |
ancestor-or-self | 選取當前節點的所有先輩節點及當前節點自己 |
attribute | 選取當前節點的所有屬性 |
child | 選取當前節點的所有子節點 |
descendant | 選取當前節點的所有後代節點 |
descendant-or-self | 選取當前節點的所有後代節點及當前節點自己 |
following | 選取黨建節點結束後的所有節點 |
parent | 選取當前節點的父節點 |
preceding-sibling | 選取當前節點之前的所有同輩節點 |
self | 選取當前節點自己 |