09《Python 原生爬蟲教程》使用 Xpath 進行爬蟲開發(fā)

Xpath( XML Path Language, XML路徑語言),是一種在 XML 數(shù)據(jù)中查找信息的語言,現(xiàn)在,我們也可以使用它在 HTML 中查找需要的信息。

既然談到 Xpath 是一門語言,當然它就會有自己的一些特定的語法。我們這里羅列一些經(jīng)常使用的語法,熟悉下面的基本語法之后,就能滿足我們?nèi)粘5呐老x開發(fā)所用。

本小節(jié)主要內(nèi)容:

  • Xpath的基本概念
  • Xpath的基本語法
  • Xpath實戰(zhàn)

學(xué)習(xí)目標:

熟練掌握常用的 Xpath 的基本操作

1. 開發(fā)前的準備

前面我們介紹的 XPath 基本的語法和基本操作,下面我們通過 lxml 庫,來熟悉一下 XPath 的使用。

首先,我們需要一個測試文件,文件如下,文件名為 xpath_test.xml:

<!---  這是一個測試數(shù)據(jù),方便我們后面進行解析-->
<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 節(jié)點之間的關(guān)系

  • 父節(jié)點:每個元素都有一個父親節(jié)點;
  • 子節(jié)點:每個元素節(jié)點可以有零個,一個或者多個父親節(jié)點;
  • 兄弟節(jié)點:相同父親節(jié)點的節(jié)點;
  • 先輩節(jié)點:一個元素的父親節(jié)點的父親節(jié)點;
  • 后輩節(jié)點:一個元素的子節(jié)點的子節(jié)點。

表達式基本語法

表達式 功能簡介
node 選取node下面的所有的節(jié)點
/node 斜杠是代表絕對路徑,這個表達式語法的意思就是選擇根上的node
//node 選擇所有的node的節(jié)點,與XML的位置無關(guān)
. 選擇當前節(jié)點
選擇當前節(jié)點的父親節(jié)點
node/child 選取node子節(jié)點的所有的child元素
node//child 選取所有后備節(jié)點的chiid信息
//@href 選取所有的href的屬性

2.2 謂語與通配符

表達式 功能簡介
/books/python[1] 選取books子元素中的第一個python元素
/books/python[last()] 選取books子元素中的最后一個元素
/books/python[position()<10] 選取books子元素的前9個元素
. 選擇當前節(jié)點
選擇當前節(jié)點的父親節(jié)點
node/child 選取node子節(jié)點的所有的child元素
node//child 選取所有后備節(jié)點的chiid信息
//@href 選取所有的href的屬性

3. 開發(fā)案例

開發(fā)案例一:

  • 從xml中查找出所有的’li’標簽
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li')
代碼塊123

運行結(jié)果如下圖所示:


5e7cc397083827bb08260134.jpg

開發(fā)案例二:

  • 從xml中查找出所有的’li’標簽的所有class
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li/@class')

運行結(jié)果如下圖所示:


5e93c6c40897b6df08260134.jpg

開發(fā)案例三:

  • 從xml中查找出所有的’li’標簽下面的href為a.html的標簽
from lxml import etree
emt = etree.parse('text.xml')
rst = emt.xpath('//li/a[@href="a.html"]')
代碼塊123

運行結(jié)果如下圖所示:


5e93c6cb089ca45908350136.jpg

4. 小結(jié)

XPath 是一種查詢語言,它是通過路徑來尋找相應(yīng)的信息,正如它的英文名稱 path 一樣,通過不同種X路徑,最終找到自己需要的信息。通過 XPath,我們不但可以搜索 XML,也可以搜索 HTML。

通過案例,我們基本熟悉了 XPath 的基本使用,這也為我們后面學(xué)習(xí) BeautifulSoup 打下了良好的基礎(chǔ),XPath 為我們從復(fù)雜的文檔中,快速定位信息提供了良好的支持,也為我們后面處理和整理爬蟲爬下來的信息奠定了根基。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容