Поскольку я не выношу подход lxml к пространствам имен, я написал небольшой метод, который вы можете привязать к классу HtmlElement
.
Просто импортируйте HtmlElement
:
from lxml.etree import HtmlElement
Затем поместите это в свой файл:
# Patch the HtmlElement class to add a function that can handle regular
# expressions within XPath queries.
def re_xpath(self, path):
return self.xpath(path, namespaces={
're': 'http://exslt.org/regular-expressions'})
HtmlElement.re_xpath = re_xpath
И затем, когда вы хотите сделать запрос регулярного выражения, просто выполните:
my_node.re_xpath("//a[re:match(text(), 'some text')]")
И вы отправляетесь в гонки. Потратив немного больше работы, вы, вероятно, могли бы изменить это, чтобы заменить сам метод xpath
, но я не стал беспокоиться, поскольку он работает достаточно хорошо.