zoukankan      html  css  js  c++  java
  • 增量解析

    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/>'
  • 相关阅读:
    周末总结
    大数据开源框架技术汇总
    oracle迁移mysql总结
    梯度下降
    BFC的概念
    元素类型
    window10安装tensorflow
    学习使用git
    设计模式中的关系
    拟合圆
  • 原文地址:https://www.cnblogs.com/shiliye/p/11770266.html
Copyright © 2011-2022 走看看