Интересно, можно ли переписать выражение xpath, чтобы оно работало быстрее? Единственное, что может сработать, - это избежать построения набора узлов name_list (если он вам не понадобится позже) и подсчета узлов внутри lxml. Примерно так:
start = datetime.now()
name_list_len = root.xpath("count(/book/author/name/text())")
print ("Size of list = " + str(name_list_len))
end = datetime.now()
В противном случае вы можете найти синтаксический анализатор быстрее для извлечения текста, но он не проверяется и более сложен в использовании (вам нужно написать конечный автомат и пару обратные вызовы). Если вам просто нужен текст, может быть быстрее использовать реализацию C дерева элементов API . lxml отметки делают интересное чтение и, похоже, намекают на то, что с этим вы сможете быстрее извлечь текст.
Одной из распространенных проблем производительности xpath является ненужное использование «//» в начале выражения. В этом случае, сделав выражение абсолютным, например ::
name_list = root.xpath("/rootelement/book/author/name/text()")
может быть намного быстрее, если документ структурирован, чтобы разрешить это. Здесь не должно быть проблем.