最近遇到個需求,需要爬一些數據使用,寫好了爬蟲后爬到了一段HTML,然后用lxml解析,接下來就是定位到具體節點提取內容。遇到了一個問題,想要提取的內容在一個class名為full-content的<div>中,文本內容有可能就在div中,也有可能在子孫節點中,那怎么全部提取呢?查了一下Xpath有軸與步長的用法,
詳細用法參考:http://www.w3school.com.cn/xpath/xpath_axes.asp
| 軸名稱 | 結果 |
|---|---|
| ancestor | 選取當前節點的所有先輩(父、祖父等)。 |
| ancestor-or-self | 選取當前節點的所有先輩(父、祖父等)以及當前節點本身。 |
| attribute | 選取當前節點的所有屬性。 |
| child | 選取當前節點的所有子元素。 |
| descendant | 選取當前節點的所有后代元素(子、孫等)。 |
| descendant-or-self | 選取當前節點的所有后代元素(子、孫等)以及當前節點本身。 |
| following | 選取文檔中當前節點的結束標簽之后的所有節點。 |
| namespace | 選取當前節點的所有命名空間節點。 |
| parent | 選取當前節點的父節點。 |
| preceding | 選取文檔中當前節點的開始標簽之前的所有節點。 |
| preceding-sibling | 選取當前節點之前的所有同級節點。 |
| self | 選取當前節點。 |
因此:用以下Xpath表達式解決了問題。
"//div[@class="full-content"]/descendant::text()"
方法二:
Xpath選取多個路徑也可以用以下方式實現:
A路徑|B路徑
