Python lxml.etree—从字符串还是直接从链接解析XML更有效?

Python lxml.etree—从字符串还是直接从链接解析XML更有效?,python,xml,parsing,urllib2,lxml,Python,Xml,Parsing,Urllib2,Lxml,使用lxml.etreepython框架,直接从指向在线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

使用
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文件中,然后从中进行解析?

如果“有效”是指“有效”,我相对确定您将看不到两者之间的任何区别(除非
ET.parse(link)
的实现非常糟糕)


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

我用一个简单的计时说唱程序运行了这两种方法

方法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 ms

方法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似乎会减慢第二个函数的速度

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