增量解析

lxml.etree提供的用于增量解析的方式有以下两种:

方式一

通过file-like对象不断的调用read()方法

当数据源是从urllib 或其他file-like对象时,推荐使用该方式
注意,在这种情况下,解析器将阻塞并等待数据变为可用

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>'

方式二

通过feed(data)和close()方法提供的feed解析器接口

该方法可以随时中断解析过程,稍后再调用feed()方法继续解析
如果希望避免阻塞对解析器的调用,例如在twisted之类的框架中,或者当数据以缓慢的速度或块的形式出现时
并且希望在等待下一个块时执行其他操作,那么这将非常有用
在调用close()方法之后(或者当解析器引发异常时),可以通过再次调用其feed()方法来重用解析器

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/>'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值