最近遇到個需求,需要爬一些數據使用,寫好了爬蟲后爬到了一段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路徑