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爆速!!!