Python 将root.xpath()与正则表达式一起应用将返回一个lxml.etree.\u elementUnicodesult

Python 将root.xpath()与正则表达式一起应用将返回一个lxml.etree.\u elementUnicodesult,python,regex,html-parsing,lxml,Python,Regex,Html Parsing,Lxml,我正在生成一个模型来找出一段文本在HTML文件中的位置 所以,我有一个数据库,里面有大量来自不同报纸文章的数据,比如标题、发表日期、作者和新闻文本。我试图做的是通过分析这些数据,生成一个模型,该模型可以自己找到包含这些内容的HTML标记的XPath 问题是当我在xpath方法中使用正则表达式时,如下所示: from lxml import html with open('somecode.html', 'r') as f: root = html.fromstring(f.read()

我正在生成一个模型来找出一段文本在HTML文件中的位置

所以,我有一个数据库,里面有大量来自不同报纸文章的数据,比如标题、发表日期、作者和新闻文本。我试图做的是通过分析这些数据,生成一个模型,该模型可以自己找到包含这些内容的HTML标记的XPath

问题是当我在xpath方法中使用正则表达式时,如下所示:

from lxml import html

with open('somecode.html', 'r') as f:
    root = html.fromstring(f.read())

list_of_xpaths = root.xpath('//*/@*[re:match(.,"2019-04-15")]')
这是在代码中搜索发布日期的示例。它返回一个lxml.etree.\u元素unicoderesult,而不是lxml.etree.\u元素

不幸的是,在应用
root.getroottree().getpath(XPath[0])
之后,这种类型的元素不允许我像lxml.etree.\u元素一样获取XPath的位置

有没有办法获取这种类型元素的XPath?怎么做


是否有方法使用regex返回lxml.etree.\u elementunicodesult元素?

问题是,您得到的属性值表示为
\u elementunicodesult
类的实例

如果我们反省一下
\u elementunicodesult
类提供了什么,我们可以看到它允许您通过
.getparent()
方法访问具有此属性的元素:

attribute = list_of_xpaths[0]
element = attribute.getparent()

print(root.getroottree().getpath(element))
这将为我们提供元素的路径,但由于我们还需要属性名,我们可以执行以下操作:

print(attribute.attrname) 

然后,为了获得指向元素属性的完整xpath,我们可以使用:

path_to_element = root.getroottree().getpath(element)
attribute_name = attribute.attrname

complete_path = path_to_element + "/@" + attribute_name
print(complete_path)

仅供参考,
\u elementunicodesult
还通过
指示这是否实际上是一个属性。is\u attribute
属性(因为该类还表示文本节点和尾部)。

嗯,您的解决方案几乎完美无瑕!它返回我/html/head/meta[33]/@content。我将尝试找到一种获得更漂亮xpath的方法,但是你教了我一些重要的东西,我只是有很多想法。谢谢你!