有沒有辦法從lxml的lxml.etree.iterparse中獲取多個標籤名稱?我有一個類似文件的對象,它具有昂貴的讀取操作和許多標記,因此獲取所有標記或執行兩次傳遞並不理想。lxml的iterparse中有多個標籤名稱?
編輯:這將是像美麗的湯的find(['tag-1', 'tag-2])
,除了作爲iterparse的參數。想象一下,解析HTML頁面的<td>
和<div>
標籤。
有沒有辦法從lxml的lxml.etree.iterparse中獲取多個標籤名稱?我有一個類似文件的對象,它具有昂貴的讀取操作和許多標記,因此獲取所有標記或執行兩次傳遞並不理想。lxml的iterparse中有多個標籤名稱?
編輯:這將是像美麗的湯的find(['tag-1', 'tag-2])
,除了作爲iterparse的參數。想象一下,解析HTML頁面的<td>
和<div>
標籤。
我不是100%肯定你的意思在這裏是「讓所有標籤」,但也許這是你在找什麼:
for event, elem in iterparse(file_like_object):
if elem.tag == 'td' or elem.tag == 'div':
# reached the end of an interesting tag
print 'found:', elem.tag
# possibly quit early to prevent further parsing
if exit_condition: break
iterparse
在分析過程中產生的飛行事件,所以你只需要讀取儘可能多的數據。但是,在解析過程中,您無法跳過閱讀元素,因爲您不知道要跳過多遠。在上面,我們只是忽略了我們不感興趣的標籤。
正如你可能已經知道的:不要使用xml解析器的html。 編輯 - 事實證明,lxml支持html解析,但您應該檢查文檔以查看程度。
很好的例子,謝謝。您可以使用iterparse的標籤參數限制標籤,但我不認爲您可以放入多個標籤。 – Chris 2011-03-29 18:19:29
我知道我遲到了,但也許別人需要同一個問題的幫助。 此代碼將產生兩個Tag1
事件和Tag2
標籤:
etree.iterparse(io.BytesIO(xml), events=('end',), tag=('Tag1', 'Tag2'))
您可以加入一個例子嗎?我不確定你的意思是「多個標籤名稱」。你的意思是相當於做一個.find()與你正在尋找多種可能的選項? XML(或者只是由XML構成)的簡短部分的一個例子就是您希望獲得的內容是最優的。 – nearlymonolith 2010-08-19 18:17:04