利用XPath選取HTML節點
目錄
- 什麼是Xpath?
- 常見的Xpath中節點及節點間的關係
- Xpath路徑表達式(節選)
什麼是Xpath?
Xpath是XML-路徑語言的簡稱。顧名思義,Xpath可以用於定位XML文本的節點,但實際上,Xpath也適用於定位HTML中的節點。
節點及節點間的關係
在HTML中,節點就是一個個HTML標籤。分析節點間的關係也就是要清楚HTML文檔中各標籤間的關係。釐清這些關係對於書寫Xpath路徑表達式來說非常重要。
節點間的關係(下面通過一段HTML代碼說明:)
<div class="header-wrapper"> <a href="http://www.baidu.com"> <a href="http://blog.jobbole.com"><img src="xxx" alt="文章" /></a></div>
父節點(Parent)
元素div是元素a的父節點;第二個元素a也是元素img的父節點。
子節點(Children)
元素a是元素div的子節點;元素img是子節點。
兄弟/同胞節點(Sibling)
兄弟節點在HTML中的地位相等,它們有相同的父節點。如上面例子中,兩個a元素互為兄弟節點。
先輩節點(Descendant)
對於img元素來說,它的父節點(第二個a元素),和它的父節點的父節點(元素div)統稱為img的先輩節點。在一個HTML文件中,先輩節點一般不唯一,比如這裡的例子中,元素img的先輩節點包含兩個元素。
後代節點(Descendant)
對於img元素來說,它的子節點(第二個a元素),和它的子節點的子節點(元素img)統稱為div的後代節點。
在使用Xpath中,搞清楚節點間的關係是非常重要的。
Xpath路徑表達式(節選)
XPath 使用路徑表達式來選取 XML 文檔(或是HTML文檔)中的節點或節點集。下面列舉一些常見的路徑表達式。
再看稍微複雜的情況
- 在節點後加上帶有數字的方括弧,可以根據兄弟節點在文檔中出現的先後次序選擇元素(數字1為第一個依次類推)。如果說我想取一個元素,而它從倒數來看更加方便,那該如何取呢?後面將說明這種方法。
- 通過在節點後加上帶有屬性名-值對的方括弧,可以篩選出需要的節點。屬性值的寫法為:@屬性名=「屬性值」
選取位置元素和屬性
最後介紹Xpath中一些常用的函數
- 適用路徑表達式時必須將其包圍在一對單引號(或雙引號)中。如果路徑表達式外是雙引號,則路徑表達式中的屬性值必須用單引號;如果路徑表示外是單引號,則路徑表達式中的屬性值必須用雙引號,以此來避免歧義。
- contains函數在提取一個帶有多值屬性的節點時很有幫助
選取多個元素——在路徑表示中使用|
待續...
推薦閱讀:
※谷歌瀏覽器直接提取的xpath,在python中為什麼無法提取相應內容?
※爬蟲三步走(二)解析源碼
※學爬蟲利器XPath,看這一篇就夠了
※用xpath提取網頁上的元素,能否根據周圍的關鍵字來定位?