溫馨提示×

溫馨提示×

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

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

python lxml中etree的簡單應用

發布時間:2020-10-15 12:43:36 來源:腳本之家 閱讀:241 作者:鍋爐房劉大爺 欄目:開發技術

我一般都是通過xpath解析DOM樹的時候會使用lxml的etree,可以很方便的從html源碼中得到自己想要的內容。

這里主要介紹一下我常用到的兩個方法,分別是etree.HTML()和etree.tostrint()。

1.etree.HTML()

etree.HTML()可以用來解析字符串格式的HTML文檔對象,將傳進去的字符串轉變成_Element對象。作為_Element對象,可以方便的使用getparent()、remove()、xpath()等方法。

如果想通過xpath獲取html源碼中的內容,就要先將html源碼轉換成_Element對象,然后再使用xpath()方法進行解析。例如,這里有一段最簡單的html源碼:"<html><body><h2>This is a test</h2></body></html>",現在想要得到h2標簽中的文本,可以這樣實現:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h2>This is a test</h2></body></html>'
# 將html轉換成_Element對象
_element = etree.HTML(html)
# 通過xpath表達式獲取h2標簽中的文本
text = _element.xpath('//h2/text()')
print 'result is: ', text

結果:

result is: ['This is a test']

通過結果可以知道,xpath()方法放回的結果是一個列表,所以通常在取xpath()方法結果的時候,只取列表中的第一個元素。

2.etree.tostring()

etree.tostring()方法用來將_Element對象轉換成字符串。一般通過簡單的xpath表達式無法得到想要的內容的時候我就會用該方法。例如,將上面的html小改動一下:"<html><body><h2>This <a>is a </a>test</h2></body></html>",這時候如果想要得到h2中的文本該怎么辦呢?使用“//h2/text()”試試(將上面的html保存并用火狐瀏覽器打開,然后在FirePath中輸入該xpath表達式):

python lxml中etree的簡單應用

通過截圖左下角的提示可以知道,使用xpath表達式“//h2/text()”只能得到h2標簽中文本的“This”和“test”,用代碼實現看看:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h2>This <a>is a </a>test</h2></body></html>'
_element = etree.HTML(html)
text = _element.xpath('//h2/text()')
print 'result is: ', text

運行結果:

result is: ['This ', 'test']

確實,使用xpath()方法,只能得到h2中部分文本內容,我們再試試使用“//h2//text()”看看:

python lxml中etree的簡單應用

然后通過代碼實現看看:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h2>This <a>is a </a>test</h2></body></html>'
_element = etree.HTML(html)
text = _element.xpath('//h2//text()')
print 'result is: ', text

運行結果:

result is: ['This ', 'is a ', 'test']

通過“//h2//text()”表達式確實可以得到想要的內容,但是得到的是一個列表,還需要將列表中的所有元素“拼”起來才行,是不是有點麻煩。這時候,就可以考慮使用etree.tostring()方法了,etree.tostring()方法可以傳遞多個參數,包括element_or_tree、encoding、method等,其中method參數為text的時候,表示返回_Element對象中的所有文本,所以可以這樣:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h2>This <a>is a </a>test</h2></body></html>'
_element = etree.HTML(html)
# 先找到h2對象,然后通過etree.tostring方法找到h2對象中的所有文本
_h = _element.xpath('//h2')
# 注意,xpath方法返回的是一個列表,我們需要的是列表中的第一個元素:代表h2標簽的_Element對象
result = etree.tostring(_h[0], method='text')
print 'result is: ', result

運行結果:

result is: This is a test

這時候使用etree.tostring()方法是不是很容易的就解決問題了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

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