使用正则表达式 returns a lxml.etree._ElementUnicodeResult 应用 root.xpath()
Applying root.xpath() with regex returns a lxml.etree._ElementUnicodeResult
我正在生成一个模型来找出一段文本在 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")]')
这是在代码中搜索发布日期的示例。它 return 是 lxml.etree._ElementUnicodeResult 而不是 lxml.etree._Element。
不幸的是,在应用 root.getroottree().getpath(list_of_xpaths[0])
.
之后,这种类型的元素不允许我像 lxml.etree._Element 那样获取它所在位置的 XPath
有没有办法获取此类元素的 XPath?怎么样?
有没有办法用正则表达式 return 和 lxml.etree._ElementUnicodeResult 元素代替 lxml?
问题是您得到一个 属性值 表示为 _ElementUnicodeResult
class.
的一个实例
如果我们反省 _ElementUnicodeResult
class 提供的内容,我们可以看到它允许您通过 .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)
仅供参考,_ElementUnicodeResult
还通过 .is_attribute
属性 指示这是否实际上是一个属性(因为这个 class 也代表文本节点和尾部)。
我正在生成一个模型来找出一段文本在 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")]')
这是在代码中搜索发布日期的示例。它 return 是 lxml.etree._ElementUnicodeResult 而不是 lxml.etree._Element。
不幸的是,在应用 root.getroottree().getpath(list_of_xpaths[0])
.
有没有办法获取此类元素的 XPath?怎么样?
有没有办法用正则表达式 return 和 lxml.etree._ElementUnicodeResult 元素代替 lxml?
问题是您得到一个 属性值 表示为 _ElementUnicodeResult
class.
如果我们反省 _ElementUnicodeResult
class 提供的内容,我们可以看到它允许您通过 .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)
仅供参考,_ElementUnicodeResult
还通过 .is_attribute
属性 指示这是否实际上是一个属性(因为这个 class 也代表文本节点和尾部)。