09 使用 Xpath 進行爬蟲開發
阿新 • • 發佈:2020-06-26
Xpath( XML Path Language, XML路徑語言),是一種在 XML 資料中查詢資訊的語言,現在,我們也可以使用它在 HTML 中查詢需要的資訊。
既然談到 Xpath 是一門語言,當然它就會有自己的一些特定的語法。我們這裡羅列一些經常使用的語法,熟悉下面的基本語法之後,就能滿足我們日常的爬蟲開發所用。
本小節主要內容:
- Xpath的基本概念
- Xpath的基本語法
- Xpath實戰
學習目標:
熟練掌握常用的 Xpath 的基本操作
1. 開發前的準備
前面我們介紹的 XPath 基本的語法和基本操作,下面我們通過 lxml 庫,來熟悉一下 XPath 的使用。
首先,我們需要一個測試檔案,檔案如下,檔名為 xpath_test.xml:
<!--- 這是一個測試資料,方便我們後面進行解析-->
<div>
<ul>
<li class='item-0'><a href='a.html'>python item</a></li>
<li class='item-1'><a href='b.html'>java item</a></li>
<li class='item-inactive'><a href='c.html'><span class='bold'>C item</ span></a></li>
<li class='item-1'><a href='d.html'>java item</a></li>
<li class='item-0'><a href='b.html'>java item</a></li>
<li class='item-0'><a href='b.html'>java item</a></li>
</ul>
</div>
2. 基本語法
2.1 節點之間的關係
- 父節點:每個元素都有一個父親節點;
- 子節點:每個元素節點可以有零個,一個或者多個父親節點;
- 兄弟節點:相同父親節點的節點;
- 先輩節點:一個元素的父親節點的父親節點;
- 後輩節點:一個元素的子節點的子節點。
表示式基本語法
表示式 | 功能簡介 |
---|---|
node | 選取node下面的所有的節點 |
/node | 斜槓是代表絕對路徑,這個表示式語法的意思就是選擇根上的node |
//node | 選擇所有的node的節點,與XML的位置無關 |
. | 選擇當前節點 |
… | 選擇當前節點的父親節點 |
node/child | 選取node子節點的所有的child元素 |
node//child | 選取所有後備節點的chiid資訊 |
//@href | 選取所有的href的屬性 |
2.2 謂語與萬用字元
表示式 | 功能簡介 |
---|---|
/books/python[1] | 選取books子元素中的第一個python元素 |
/books/python[last()] | 選取books子元素中的最後一個元素 |
/books/python[position()<10] | 選取books子元素的前9個元素 |
. | 選擇當前節點 |
… | 選擇當前節點的父親節點 |
node/child | 選取node子節點的所有的child元素 |
node//child | 選取所有後備節點的chiid資訊 |
//@href | 選取所有的href的屬性 |
3. 開發案例
開發案例一:
- 從xml中查找出所有的’li’標籤
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li')
執行結果如下圖所示:
開發案例二:
- 從xml中查找出所有的’li’標籤的所有class
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li/@class')
執行結果如下圖所示:
開發案例三:
- 從xml中查找出所有的’li’標籤下面的href為a.html的標籤
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li/a[@href="a.html"]')
執行結果如下圖所示:
4. 小結
XPath 是一種查詢語言,它是通過路徑來尋找相應的資訊,正如它的英文名稱 path 一樣,通過不同種X路徑,最終找到自己需要的資訊。通過 XPath,我們不但可以搜尋 XML,也可以搜尋 HTML。
通過案例,我們基本熟悉了 XPath 的基本使用,這也為我們後面學習 BeautifulSoup 打下了良好的基礎,XPath 為我們從複雜的文件中,快速定位資訊提供了良好的支援,也為我們後面處理和整理爬蟲爬下來的資訊奠定了根基。