增量解析

lxml.etree提供的用於增量解析的方式有如下兩種:框架

方式一url

經過file-like對象不斷的調用read()方法spa

當數據源是從urllib 或其餘file-like對象時,推薦使用該方式
注意,在這種狀況下,解析器將阻塞並等待數據變爲可用code

from lxml import etree

class DataSource:
     data = [ b"<roo", b"t><", b"a/", b"><", b"/root>" ]
     def read(self, requested_size):
         try:
             return self.data.pop(0)
         except IndexError:
             return b''

tree = etree.parse(DataSource())
print(etree.tostring(tree))  #輸出:b'<root><a/></root>'

 

方式二xml

經過feed(data)和close()方法提供的feed解析器接口對象

該方法能夠隨時中斷解析過程,稍後再調用feed()方法繼續解析
若是但願避免阻塞對解析器的調用,例如在twisted之類的框架中,或者當數據以緩慢的速度或塊的形式出現時
而且但願在等待下一個塊時執行其餘操做,那麼這將很是有用
在調用close()方法以後(或者當解析器引起異常時),能夠經過再次調用其feed()方法來重用解析器blog

from lxml import etree

parser = etree.XMLParser()

parser.feed("<roo")
parser.feed("t><")
parser.feed("a/")
parser.feed("><")
parser.feed("/root>")
root = parser.close()
print(etree.tostring(root)) #輸出:b'<root><a/></root>'

parser.feed("<root/>")
root = parser.close()
print(etree.tostring(root)) #輸出:b'<root/>'
相關文章
相關標籤/搜索