[英]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.