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似乎会减慢第二个函数的速度
我运行了几次,结果保持不变