[英]Python lxml.etree - Is it more effective to parse XML from string or directly from link?
使用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文件,然后从其中解析?
我用一个简单的计时说唱器运行了这两种方法。
方法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似乎可以放慢第二个功能。
我运行了几次,结果保持不变。
如果用“有效”来表示“有效”,我可以肯定地说,您将看不到两者之间的任何区别(除非ET.parse(link)
得到了可怕的实现)。
原因是网络时间将成为解析在线XML文件的最重要部分,比将文件存储到磁盘或将其保存在内存中要长得多,并且比实际解析要长得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.