XPathでnemaspace付きの処理を行いつつベンチマーク
media:contentというタグが携帯百景のRSSのなかに含まれていたので、namespace付きのタグをXPathで処理をする勉強ついでにtimeitしてみた。
今回はXMLのparse処理もベンチマークに含めている。
import timeit from lxml import etree as lxml_etree from xml.etree import ElementTree as xml_etree n = 100; def xml_case(): global found tree_by_xml = xml_etree.parse('/tmp/fn7_many.rss') found = tree_by_xml.findall('//{%s}content' % 'http://search.yahoo.com/mrss/'); precompiled = lxml_etree.XPath('//media:content',namespaces={'media':'http://search.yahoo.com/mrss/'}); def lxml_case(): global found tree_by_lxml = lxml_etree.parse('/tmp/fn7_many.rss') found = precompiled(tree_by_lxml) #tree_by_lxml.xpath('//media:content',namespaces={'media':'http://search.yahoo.com/mrss/'}); for func in ['xml_case','lxml_case']: t = timeit.Timer(stmt=("%s()" % func),setup=("from __main__ import %s" % func)) try: sec = t.timeit(number=n) print "Timeit: %s: %s %f" % (func,len(found),sec) except: t.print_exc()
前のベンチで使用したfn7_meny.rssだけど、綴りがまちがっていたのでfn7_many.rssに名称変更。ぷw
結果は
Timeit: xml_case: 1000 38.624328 Timeit: lxml_case: 1000 4.869166
lxml爆速!!!