python lxml中etree的簡單應用
我一般都是通過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><h1>This is a test</h1></body></html>",現(xiàn)在想要得到h1標簽中的文本,可以這樣實現(xiàn):
# encoding=utf8 from lxml import etree html = '<html><body><h1>This is a test</h1></body></html>' # 將html轉換成_Element對象 _element = etree.HTML(html) # 通過xpath表達式獲取h1標簽中的文本 text = _element.xpath('//h1/text()') print 'result is: ', text
結果:
result is: ['This is a test']
通過結果可以知道,xpath()方法放回的結果是一個列表,所以通常在取xpath()方法結果的時候,只取列表中的第一個元素。
2.etree.tostring()
etree.tostring()方法用來將_Element對象轉換成字符串。一般通過簡單的xpath表達式無法得到想要的內容的時候我就會用該方法。例如,將上面的html小改動一下:"<html><body><h1>This <a>is a </a>test</h1></body></html>",這時候如果想要得到h1中的文本該怎么辦呢?使用“//h1/text()”試試(將上面的html保存并用火狐瀏覽器打開,然后在FirePath中輸入該xpath表達式):
通過截圖左下角的提示可以知道,使用xpath表達式“//h1/text()”只能得到h1標簽中文本的“This”和“test”,用代碼實現(xiàn)看看:
# encoding=utf8 from lxml import etree html = '<html><body><h1>This <a>is a </a>test</h1></body></html>' _element = etree.HTML(html) text = _element.xpath('//h1/text()') print 'result is: ', text
運行結果:
result is: ['This ', 'test']
確實,使用xpath()方法,只能得到h1中部分文本內容,我們再試試使用“//h1//text()”看看:
然后通過代碼實現(xiàn)看看:
# encoding=utf8 from lxml import etree html = '<html><body><h1>This <a>is a </a>test</h1></body></html>' _element = etree.HTML(html) text = _element.xpath('//h1//text()') print 'result is: ', text
運行結果:
result is: ['This ', 'is a ', 'test']
通過“//h1//text()”表達式確實可以得到想要的內容,但是得到的是一個列表,還需要將列表中的所有元素“拼”起來才行,是不是有點麻煩。這時候,就可以考慮使用etree.tostring()方法了,etree.tostring()方法可以傳遞多個參數(shù),包括element_or_tree、encoding、method等,其中method參數(shù)為text的時候,表示返回_Element對象中的所有文本,所以可以這樣:
# encoding=utf8 from lxml import etree html = '<html><body><h1>This <a>is a </a>test</h1></body></html>' _element = etree.HTML(html) # 先找到h1對象,然后通過etree.tostring方法找到h1對象中的所有文本 _h = _element.xpath('//h1') # 注意,xpath方法返回的是一個列表,我們需要的是列表中的第一個元素:代表h1標簽的_Element對象 result = etree.tostring(_h[0], method='text') print 'result is: ', result
運行結果:
result is: This is a test
這時候使用etree.tostring()方法是不是很容易的就解決問題了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python嵌套函數(shù)與nonlocal使用詳細介紹
這篇文章主要介紹了Python嵌套函數(shù)與nonlocal使用,nonlocal關鍵字與global關鍵字有點相似,可以對比著理解。nonlocal關鍵字只能作用域局部變量,且始終找離當前最近的上層局部作用域中的變量2022-09-09基于PyTorch實現(xiàn)一個簡單的CNN圖像分類器
本文記錄了一個簡單的基于pytorch的圖像多分類器模型構造過程,參考自Pytorch官方文檔、磐創(chuàng)團隊的《PyTorch官方教程中文版》以及余霆嵩的《PyTorch 模型訓練實用教程》。從加載數(shù)據(jù)集開始,包括了模型設計、訓練、測試等過程。2021-05-05Python數(shù)據(jù)結構與算法之字典樹實現(xiàn)方法示例
這篇文章主要介紹了Python數(shù)據(jù)結構與算法之字典樹實現(xiàn)方法,可實現(xiàn)針對單詞出現(xiàn)次數(shù)的統(tǒng)計功能,涉及Python樹結構的定義、遍歷及統(tǒng)計等相關操作技巧,需要的朋友可以參考下2017-12-12Python生成器generator和yield關鍵字的使用
生成器是一種特殊的迭代器,可以通過列表推導式的修改或者使用yield關鍵字來創(chuàng)建,生成器函數(shù)能夠在迭代時動態(tài)產生值,而不是一次性生成所有值,這有助于節(jié)省內存,yield關鍵字使函數(shù)執(zhí)行暫停并保存當前狀態(tài),下次調用時從停止處繼續(xù)執(zhí)行2024-09-09