【问题标题】:Python lxml.etree - Is it more effective to parse XML from string or directly from link?Python lxml.etree - 从字符串或直接从链接解析 XML 更有效吗?
【发布时间】:2014-05-12 16:42:00
【问题描述】:

使用lxml.etree python 框架,是直接从在线xml文件的链接解析xml更有效,还是说,使用不同的框架(例如urllib2),返回一个字符串然后从中解析?还是根本没有区别?

方法 1 - 直接从链接解析

from lxml import etree as ET

parsed = ET.parse(url_link)

方法 2 - 从字符串解析

from lxml import etree as ET
import urllib2

xml_string = urllib2.urlopen(url_link).read()
parsed = ET.parse.fromstring(xml_string)

# note: I do not have access to python 
# at the moment, so not sure whether 
# the .fromstring() function is correct

或者有没有比这两种方法更有效的方法,例如将 xml 保存到桌面上的 .xml 文件,然后从中解析?

【问题讨论】:

    标签: python xml parsing urllib2 lxml


    【解决方案1】:

    我用一个简单的计时说唱歌手运行了这两种方法。

    方法 1 - 直接从链接解析 XML

    from lxml import etree as ET
    
    @timing
    def parseXMLFromLink():
        parsed = ET.parse(url_link)
        print parsed.getroot()
    
    for n in range(0,100):
        parseXMLFromLink()
    

    平均 100 = 98.4035 毫秒

    方法 2 - 从 Urllib2 返回的字符串中解析 XML

    from lxml import etree as ET
    import urllib2
    
    @timing
    def parseXMLFromString():
        xml_string = urllib2.urlopen(url_link).read()
        parsed = ET.fromstring(xml_string)
        print parsed
    
    for n in range(0,100):
        parseXMLFromString()
    

    100 的平均值 = 286.9630 毫秒

    因此,似乎使用 lxml 直接从链接解析是更直接快速的方法。目前尚不清楚从硬盘驱动器下载然后解析大型 xml 文档是否会更快,但大概除非文档很大并且解析任务更密集,否则parseXMLFromLink() 函数仍然会更快,因为它似乎是 urllib2减慢第二个功能。

    我运行了几次,结果保持不变。

    【讨论】:

      【解决方案2】:

      如果你所说的“有效”是指“高效”,我相对肯定你会发现两者之间根本没有区别(除非ET.parse(link) 被可怕地实现了)。

      原因是网络时间将是解析在线 XML 文件最重要的部分,比将文件存储到磁盘或保存在内存中要长得多,也比实际解析要长得多。

      【讨论】:

        猜你喜欢
        • 2011-07-17
        • 2011-10-29
        • 2014-08-25
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多