前言
本來(lái)打算寫(xiě)的標(biāo)題是XPath語(yǔ)法,但是想了一下Python中的解析庫(kù)lxml,使用的是Xpath語(yǔ)法,同樣也是效率比較高的解析方法,所以就寫(xiě)成了XPath語(yǔ)法和lxml庫(kù)的用法
XPath 即為 XML 路徑語(yǔ)言,它是一種用來(lái)確定 XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文檔中某部分位置的語(yǔ)言。
XPath 基于 XML 的樹(shù)狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹(shù)中找尋節(jié)點(diǎn)的能力。 XPath 同樣也支持HTML。
XPath 是一門(mén)小型的查詢(xún)語(yǔ)言。
python 中 lxml庫(kù) 使用的是 Xpath 語(yǔ)法,是效率比較高的解析方法。
下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
安裝
為什么要用這個(gè)庫(kù)呢,因?yàn)橐獙?xiě)爬蟲(chóng)啊,利用lxml庫(kù)來(lái)解析 HTML 代碼,同時(shí)lxml也繼承了libxml2的特性自動(dòng)修正HTML代碼,利用pip安裝即可
pip install lxml
XPath語(yǔ)法
XPath是一門(mén)在XML文檔中查找信息的語(yǔ)言,可以用于在XML文檔中通過(guò)元素和屬性進(jìn)行導(dǎo)航
舉個(gè)栗子 😎
我們可以使用XPath提取網(wǎng)站地圖中的所有鏈接,也就是說(shuō)可以使用XPath去找我們HTML中的一些具體的東西
節(jié)點(diǎn)關(guān)系
在XPath中,有七種類(lèi)型的節(jié)點(diǎn):元素、屬性、文本、命名空間、處理指令、注釋以及文檔節(jié)點(diǎn)(或稱(chēng)為根節(jié)點(diǎn))
再舉個(gè)栗子 😎
<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>
第一個(gè):父(Parent)
每個(gè)元素以及屬性都有一個(gè)父
url元素是 loc、lastmod、changefreq以及 priority元素的父
第二個(gè):子(Children)
元素節(jié)點(diǎn)可有零個(gè)、一個(gè)或多個(gè)子
loc、lastmod、changefreq以及 priority元素都是url元素的子
第三個(gè):同胞(Sibling)
擁有相同的父的節(jié)點(diǎn)
loc、lastmod、changefreq以及 priority元素都是url元素的同胞
第四個(gè):先輩(Ancestor)
某節(jié)點(diǎn)的父、父的父,等等
loc元素的先輩是 url元素和 urlset元素
第五個(gè):后代(Descendant)
某個(gè)節(jié)點(diǎn)的子,子的子,等等
urlset的后代是url、loc、lastmod、changefreq以及 priority元素
如果你分不清楚,就按照子元素從上到下的去找元素節(jié)點(diǎn)
選取節(jié)點(diǎn)
XPath使用路徑表達(dá)式在 XML 文檔中選取節(jié)點(diǎn),節(jié)點(diǎn)是通過(guò)沿著路徑或者 step 來(lái)選取的,也就是上面所說(shuō)的按照子元素從上到下去找元素節(jié)點(diǎn)
這些是最有用的路徑表達(dá)式 💡