XPath 爬蟲語法大全:完整對照表與實戰技巧

XPath 爬蟲實戰語法對照表

基本選擇器

用途 XPath 語法 說明 範例
選擇所有元素 //tag 選擇頁面上所有指定標籤的元素 //div 選擇所有 div 元素
根據 ID 選擇 //*[@id='ID值'] 選擇具有特定 ID 的元素 //*[@id='header'] 選擇 ID 為 header 的元素
根據 Class 選擇 //*[contains(@class, 'CLASS值')] 選擇具有特定 Class 的元素 //*[contains(@class, 'btn')] 選擇 class 包含 btn 的元素
選擇精確 Class //*[@class='CLASS值'] 選擇 class 屬性完全匹配的元素 //*[@class='btn-primary'] 選擇 class 等於 btn-primary 的元素
選擇屬性 //*[@屬性='值'] 選擇具有特定屬性值的元素 //*[@href='https://example.com'] 選擇連結到 example.com 的元素

層級關係選擇器

用途 XPath 語法 說明 範例
子元素 //父元素/子元素 選擇直接子元素 //div/p 選擇所有 div 的直接子 p 元素
所有後代 //父元素//後代元素 選擇所有後代元素,不限層級 //div//span 選擇所有 div 內的 span 元素,不論層級
父元素 //元素/.. 選擇元素的父元素 //h1/.. 選擇所有 h1 元素的父元素
祖先元素 //元素/ancestor::標籤 選擇元素的祖先元素 //li/ancestor::div 選擇 li 元素的 div 祖先
上一個兄弟元素 //元素/preceding-sibling::標籤[1] 選擇緊鄰的前一個兄弟元素 //li[3]/preceding-sibling::li[1] 選擇第三個 li 前的一個 li
下一個兄弟元素 //元素/following-sibling::標籤[1] 選擇緊鄰的後一個兄弟元素 //div/following-sibling::p[1] 選擇 div 後的第一個 p 元素
所有兄弟元素 //元素/following-sibling::標籤 選擇所有後續兄弟元素 //h2/following-sibling::p 選擇 h2 後的所有 p 元素

文本與內容篩選

用途 XPath 語法 說明 範例
包含特定文本 //*[contains(text(), '文本')] 選擇包含指定文本的元素 //*[contains(text(), '登入')] 選擇包含「登入」文本的元素
精確文本匹配 //*[text()='文本'] 選擇文本完全匹配的元素 //*[text()='確認'] 選擇文本為「確認」的元素
屬性包含文本 //*[contains(@屬性, '文本')] 選擇屬性值包含特定文本的元素 //*[contains(@href, 'product')] 選擇 href 包含 product 的元素
元素內容為空 //*[not(node())] 選擇沒有子節點的空元素 //div[not(node())] 選擇所有空的 div 元素

位置與索引篩選

用途 XPath 語法 說明 範例
第一個元素 (//元素)[1] 選擇符合條件的第一個元素 (//tr)[1] 選擇頁面上第一個 tr 元素
最後一個元素 (//元素)[last()] 選擇符合條件的最後一個元素 (//li)[last()] 選擇最後一個 li 元素
指定位置 (//元素)[位置] 選擇特定位置的元素 (//td)[5] 選擇第五個 td 元素
位置範圍 (//元素)[position() > N and position() < M] 選擇位置在指定範圍內的元素 (//tr)[position() > 1 and position() < 5] 選擇第 2 到第 4 個 tr
奇數位置元素 //元素[position() mod 2 = 1] 選擇位置為奇數的元素 //tr[position() mod 2 = 1] 選擇奇數行
偶數位置元素 //元素[position() mod 2 = 0] 選擇位置為偶數的元素 //tr[position() mod 2 = 0] 選擇偶數行

複合條件選擇

用途 XPath 語法 說明 範例
AND 條件 //元素[@屬性1='值1' and @屬性2='值2'] 同時符合多個條件 //input[@type='text' and @required] 選擇必填的文本輸入框
OR 條件 //元素[@屬性1='值1' or @屬性2='值2'] 符合任一條件 //button[contains(@class, 'submit') or contains(@class, 'save')] 選擇提交或保存按鈕
NOT 條件 //元素[not(@屬性='值')] 不符合特定條件 //div[not(contains(@class, 'hidden'))] 選擇不包含 hidden 類的 div
多重條件 //元素[條件1][條件2] 依序篩選多個條件 //div[contains(@class, 'product')][.//span[contains(@class, 'price')]] 選擇包含價格的產品 div

常用爬蟲實例

用途 XPath 語法 說明
爬取表格數據 //table[@id='data']//tr 選擇特定表格的所有行
爬取產品列表 //div[contains(@class, 'product-item')] 選擇所有產品項目
爬取分頁連結 //div[contains(@class, 'pagination')]//a 選擇分頁區域的所有連結
爬取導航菜單 //nav//li/a 選擇導航菜單中的所有連結
爬取特定區塊 //div[@id='content']//p 選擇內容區域中的所有段落
爬取圖片連結 //div[contains(@class, 'gallery')]//img/@src 選擇圖庫中所有圖片的 src 屬性
爬取下拉選單選項 //select[@id='options']/option 選擇特定下拉選單的所有選項

特殊功能選擇器

用途 XPath 語法 說明 範例
獲取屬性值 //元素/@屬性 直接獲取元素的特定屬性值 //img/@src 獲取所有圖片的 src 屬性值
元素計數 count(//元素) 計算符合條件的元素數量 count(//a[contains(@href, 'product')]) 計算產品連結數量
連接多個結果 //元素1 | //元素2 合併多個 XPath 查詢結果 //h1 | //h2 選擇所有 h1 和 h2 元素
選擇可見元素 //*[not(contains(@style, 'display:none'))] 選擇頁面上可見的元素 //div[not(contains(@style, 'display:none'))] 選擇可見的 div
獲取節點文本 normalize-space(//元素) 獲取元素的文本並去除多餘空白 normalize-space(//h1) 獲取 h1 標題的文本

動態頁面爬取技巧

用途 技巧 說明
等待元素加載 使用 WebDriverWait 設置顯式等待,直到特定 XPath 選擇器能夠找到元素
處理 iframe 先切換到 iframe 再定位 driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@id='content']"))
處理 AJAX 加載 使用顯式等待 等待特定元素可見或可點擊,再進行後續操作
處理動態 ID 使用 contains 或 starts-with 對於動態生成的 ID,使用部分匹配而非精確匹配
處理浮動元素 使用相對位置定位 透過周圍的穩定元素來定位浮動元素