標籤:索引 table des soup 選擇 ade parent gpo tab
原文標題:《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
Python中Scrapy架構元素選取器XPath的簡單一實例