XPath (XML Path Language) 是一門在 XML 文檔中查找資訊的語言,可用來在 XML 文檔中對元素和屬性進行周遊。
XPath定位在爬蟲和自動化測試中都比較常用,通過使用路徑表達式來選取 XML 文檔中的節點或者節點集,熟練掌握XPath可以極大提高提取資料的效率。
因為XPath解析資料是基于元素(Element)的樹形結構,是以學習XPath前,先了解一下html的結構及常用标簽。
關于HTML學習可以參考W3School文檔:https://www.w3school.com.cn/html/index.asp
常用标簽
表達式
描述
nodename
選取此節點的所有子節點。
/
從根節點開始選取,絕對定位
//
從符合條件的元素的開始,而不考慮它們的位置。相對定位
.
選取目前節點
..
選取目前節點的父節點
@
選取屬性
謂語用來查找某個特定的節點或者包含某個指定值的節點,被嵌在方括号中。
通配符
*
比對任何元素節點。
比對任何屬性節點。
1.元素屬性,快速定位,唯一屬性:
<code>//*[@id="images"]</code>
2.層級與屬性結合,解決沒有屬性問題:
<code>//div[@id="images"]/a[1]</code>
3.屬性與邏輯結合,解決多個屬性重名問題:
//*[@id="su" and @class="bg s_btn" ]
注意,表達式裡的下标是從1開始的。 絕對定位以/開頭,依賴頁面的元素的順序和位置,相對定位以//開頭,不依賴頁面元素順序和位置,根據條件進行比對,優先使用相對定位。
學習XPath本質就是掌握各種表達式的技巧,除了上述說到方法外,還有一些特别的定位方式:
4.查找id屬性的值包含"kw"的元素:
<code>//*[contains(@id,'kw')]</code>
5.查找⽂本⾥包含"新聞"的元素:
<code>//*[contains(text(),'新聞')]</code>
6.查找class屬性中開始位置包含's_form_wrapper'關鍵字的元素:
<code>//*[starts-with(@class,'s_form_wrapper')]</code>
7.使⽤多個相對路徑去定位⼀個元素⽤//分開:
<code>//div[@class=‘formgroup’]//input[@id=‘user-message’]</code>
8.軸定位:
軸定位,使用::表示
查找id="head"元素後⾯标簽名為input的第一個元素
<code>//*[@id="head"]//following::input[1]</code>
1.使用Chrome浏覽器的開發者工具,可以快速擷取XPath表達式:
點選選擇光标,選擇頁面上的元素位置,在控制台右鍵選擇Copy XPath,表達式就複制到粘貼闆中了。
擷取到的XPath路徑:<code>//*[@id="su"]</code>
擷取full XPath:<code>/html/body/div[1]/div[1]/div[5]/div/div/form/span[2]/input</code>
2.驗證表達式:
按鍵“Ctrl+F”,在控制台中輸入需要檢查的XPath路徑,對應的元素會有的顔色辨別。