gpt4 book ai didi

python - lxml XPath-过滤所有文本,包括尾部

转载 作者:行者123 更新时间:2023-11-28 17:43:54 27 4
gpt4 key购买 nike

我正在尝试使用 lxml 和 Python 从网站中过滤掉文本,但是,格式可能非常不规则。 (这是一个论坛。)

例如,我可能有:

<a>
<c>
<d>
MARKER some text
</d>
</c>
MARKER other text 1
<b>MARKER other text 2</b>
M<b>ARKE</b>R <e>other</e> text 3
</a>

我希望我的 xpath 返回给我:

MARKER other text 1
<b>MARKER other text 2</b>
M<b>ARKE</b>R <e>other</e> text 3

换句话说,我希望能够解析嵌套文本,但也返回带标记的文本。

我目前拥有的是:

filter = "//text()[not(parent::d[parent::c]) and contains(., 'MARKER')]"
filtered = root.xpath(self.vote_xpath)
for i in filtered:
print(i)

哪里root是一个从字符串解析出来的元素树,它返回我:

MARKER other text 1
MARKER other text 2

这无法返回带有 MARKER 的最后文本,也无法保持我想要的格式。

我应该如何从这里开始?

编辑:好的,我一直在摆弄 xpath。

//node()[not(parent::d[parent::c]) and contains(., 'MARKER')]

运行于:

<a>
<c>
<d>
some text
</d>
</c>
other text 1
<b>other text 2</b>
M<b>ARKE</b>R <e>other</e> text 3
</a>

成功注册 MARKER<b> 打破了标签,自 node()将整个节点传递给 contains筛选。但是,它返回整个父节点的匹配项,在本例中它只返回整个 <a>。节点及其所有内容。

我应该如何处理才能使 xpath 仅返回匹配的部分?

最佳答案

从不同的角度来看它可能会有所帮助。您的半完整解决方案侧重于所需数据的父元素,但您也可以使用子路径标识符或相对路径标识符。

我得到了这个 XPATH:

a/c/following-sibling::node()

返回:

   MARKER other text 1

<b>MARKER other text 2</b>


M
<b>ARKE</b>

R
<e>other</e>

text 3

虽然这不是您正在寻找的格式,但它是正确的数据,XPATH 并不是真正用于格式化您的结果,因此在那里没有太多工作要做。

关于python - lxml XPath-过滤所有文本,包括尾部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20812396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com