Python中Scrapy框架元素選擇器XPath的簡單例項

zhuxiaoxi發表於2018-03-09

原文標題:《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 選取當前節點自己
原文地址:http://mp.weixin.qq.com/s/UT4UFDpgo2ER300zq_uqsQ

相關文章