使用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文件,然后从那些解析?
答案 0 :(得分:7)
我用一个简单的计时说唱歌手来运行这两种方法。
方法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似乎减慢了第二个功能。
我跑了几次,结果保持不变。
答案 1 :(得分:-1)
如果'有效'意味着'有效',我相对肯定你会发现两者之间没有差别(除非ET.parse(link)
被严重执行)。
原因是网络时间将是解析在线XML文件的最重要部分,比将文件存储到磁盘或将其保留在内存中要长得多,并且比实际解析它要长很多。 / p>