溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python怎么解析xml

發(fā)布時(shí)間:2022-02-22 16:51:41 來(lái)源:億速云 閱讀:144 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了python怎么解析xml的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇python怎么解析xml文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

介紹

lxml庫(kù)是一個(gè)python的xml解析庫(kù),它支持HTML和xml的解析,并且支持Xpath解析方式。相比于原生的xml解析而言,lxml的接下效率相當(dāng)高。

Xpath是一門(mén)在xml文檔中查找信息的語(yǔ)言,雖然它最早是用來(lái)搜尋XML文檔的,但它也可以用于查找html語(yǔ)言。它的選擇功能十分強(qiáng)大,提供了非常簡(jiǎn)單明了的路徑選擇表達(dá)式,另外他還提供了超過(guò)100個(gè)內(nèi)建函數(shù)用于數(shù)據(jù)處理。

安裝

使用pip進(jìn)行安裝即可,對(duì)應(yīng)的pip命令如下:

pip install lxml

使用

一、讀取文本解析節(jié)點(diǎn)

from lxml import etree

text='''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">第一個(gè)</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0"><a href="link5.html">a屬性</a>
     </ul>
 </div>
'''
html=etree.HTML(text) #初始化生成一個(gè)XPath解析對(duì)象
result=etree.tostring(html,encoding='utf-8')   #解析對(duì)象輸出代碼
print(type(html))
print(type(result))
print(result.decode('utf-8'))

 etree會(huì)修復(fù)缺少的HTML文本節(jié)點(diǎn),所以打印結(jié)果是有補(bǔ)全html標(biāo)簽的。

二、讀取HTML文件進(jìn)行解析

from lxml import etree

html=etree.parse('test.html',etree.HTMLParser()) #指定解析器HTMLParser會(huì)根據(jù)文件修復(fù)HTML文件中缺失的如聲明信息
result=etree.tostring(html)   #解析成字節(jié)
#result=etree.tostringlist(html) #解析成列表
print(type(html))
print(type(result))
print(result)

三、獲取所有節(jié)點(diǎn)

from lxml import etree

html=etree.parse('test',etree.HTMLParser())
result=html.xpath('//*')  #//代表獲取子孫節(jié)點(diǎn),*代表獲取所有

print(type(html))
print(type(result))
print(result)

 返回一個(gè)列表,每個(gè)元素都是Element類(lèi)型,所有的節(jié)點(diǎn)都包含在其中。

如需獲取li節(jié)點(diǎn),可以在//后面加上節(jié)點(diǎn)名稱(chēng),然后調(diào)用Xpath方法。

四、文本獲取

from lxml import etree

text='''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">第一個(gè)</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
     </ul>
 </div>
'''

html=etree.HTML(text,etree.HTMLParser())
result=html.xpath('//li[@class="item-1"]/a/text()') #獲取a節(jié)點(diǎn)下的內(nèi)容
result1=html.xpath('//li[@class="item-1"]//text()') #獲取li下所有子孫節(jié)點(diǎn)的內(nèi)容

print(result)
print(result1)

 通過(guò)Xpath的text()方法,我們可以獲取節(jié)點(diǎn)中的文本。

五、屬性獲取

通過(guò)@符號(hào)即可獲取節(jié)點(diǎn)的屬性,比如下面代碼的獲取a標(biāo)簽的href屬性:

result=html.xpath('//li/a/@href')  #獲取a的href屬性
result=html.xpath('//li//@href')   #獲取所有l(wèi)i子孫節(jié)點(diǎn)的href屬性

六、按序選擇

我們進(jìn)行選擇的時(shí)候有時(shí)候會(huì)匹配多個(gè)節(jié)點(diǎn),但我們只需要其中的一個(gè),這時(shí)候我們就可以通過(guò)引入索引的方法(中括號(hào)內(nèi)加索引值)獲取特定次序的節(jié)點(diǎn):

from lxml import etree

text1='''
<div>
    <ul>
         <li class="aaa" name="item"><a href="link1.html">第一個(gè)</a></li>
         <li class="aaa" name="item"><a href="link1.html">第二個(gè)</a></li>
         <li class="aaa" name="item"><a href="link1.html">第三個(gè)</a></li>
         <li class="aaa" name="item"><a href="link1.html">第四個(gè)</a></li> 
     </ul>
 </div>
'''

html=etree.HTML(text1,etree.HTMLParser())

result=html.xpath('//li[contains(@class,"aaa")]/a/text()') #獲取所有l(wèi)i節(jié)點(diǎn)下a節(jié)點(diǎn)的內(nèi)容
result1=html.xpath('//li[1][contains(@class,"aaa")]/a/text()') #獲取第一個(gè)
result2=html.xpath('//li[last()][contains(@class,"aaa")]/a/text()') #獲取最后一個(gè)
result3=html.xpath('//li[position()>2 and position()<4][contains(@class,"aaa")]/a/text()') #獲取定位值大于3且小于4的節(jié)點(diǎn)(也就是獲取第三個(gè))
result4=html.xpath('//li[last()-2][contains(@class,"aaa")]/a/text()') #獲取倒數(shù)第三個(gè)


print(result)
print(result1)
print(result2)
print(result3)
print(result4)

關(guān)于“python怎么解析xml”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“python怎么解析xml”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)
推薦閱讀:
  1. SQL解析XML
  2. 解析XML

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI