溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python爬蟲基礎之XPath語法與lxml庫的用法詳解

發布時間:2020-10-14 08:58:55 來源:腳本之家 閱讀:266 作者:qq52o 欄目:開發技術

前言

本來打算寫的標題是XPath語法,但是想了一下Python中的解析庫lxml,使用的是Xpath語法,同樣也是效率比較高的解析方法,所以就寫成了XPath語法和lxml庫的用法

XPath 即為 XML 路徑語言,它是一種用來確定 XML(標準通用標記語言的子集)文檔中某部分位置的語言。

XPath 基于 XML 的樹狀結構,提供在數據結構樹中找尋節點的能力。 XPath 同樣也支持HTML。

XPath 是一門小型的查詢語言。

python 中 lxml庫 使用的是 Xpath 語法,是效率比較高的解析方法。

下面話不多說了,來一起看看詳細的介紹吧

安裝

為什么要用這個庫呢,因為要寫爬蟲啊,利用lxml庫來解析 HTML 代碼,同時lxml也繼承了libxml2的特性自動修正HTML代碼,利用pip安裝即可

pip install lxml

XPath語法

XPath是一門在XML文檔中查找信息的語言,可以用于在XML文檔中通過元素和屬性進行導航

舉個栗子 😎

我們可以使用XPath提取網站地圖中的所有鏈接,也就是說可以使用XPath去找我們HTML中的一些具體的東西

節點關系

在XPath中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔節點(或稱為根節點)

再舉個栗子 😎

<urlset>
<url>
<loc>https://qq52o.me</loc>
<lastmod>2018-04-28T19:00:42+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
</urlset>

第一個:父(Parent)

每個元素以及屬性都有一個父

url元素是 loc、lastmod、changefreq以及 priority元素的父

第二個:子(Children)

元素節點可有零個、一個或多個子

loc、lastmod、changefreq以及 priority元素都是url元素的子

第三個:同胞(Sibling)

擁有相同的父的節點

loc、lastmod、changefreq以及 priority元素都是url元素的同胞

第四個:先輩(Ancestor)

某節點的父、父的父,等等

loc元素的先輩是 url元素和 urlset元素

第五個:后代(Descendant)

某個節點的子,子的子,等等

urlset的后代是url、loc、lastmod、changefreq以及 priority元素

如果你分不清楚,就按照子元素從上到下的去找元素節點

選取節點

XPath使用路徑表達式在 XML 文檔中選取節點,節點是通過沿著路徑或者 step 來選取的,也就是上面所說的按照子元素從上到下去找元素節點

這些是最有用的路徑表達式 💡

表達式 描述
nodename 選取此節點的所有子節點
/ 從根節點選取
// 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性

實例

路徑表達式 結果
urlset 選取urlset元素的所有子節點
/urlset 選取根元素 urlset
urlset/url 選取屬于urlset的子元素的所有url元素
//url 選取所有url子元素,而不管它們在文檔中的位置
urlset//url 選擇屬于urlset元素的后代的所有url元素,而不管它們位于urlset之下的什么位置
//@href 選取名為href的所有屬性

其他XPath語法請參考w3school

XPath實例測試

提取本站網站地圖中id屬性為content的的子元素h4的內容以及子元素a的href屬性,F12去看代碼找這個屬性

Python爬蟲基礎之XPath語法與lxml庫的用法詳解

div的id屬性,下面的子元素h4的內容,直接利用 text 方法來獲取元素的內容,然后輸出

Python爬蟲基礎之XPath語法與lxml庫的用法詳解

這里的子元素層級關系必須按順序寫好,不然會報錯的

IndexError: list index out of range

這就說明你的XPath規則沒寫好,list是一個空的,沒有一個元素

XPath 是一個非常好用的解析方法,同時也是作為爬蟲學習的基礎

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女