gpt4 book ai didi

python - 如何在lxml中找到元素的直接子元素

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:21 24 4
gpt4 key购买 nike

我找到了一个具有特定类的对象:

THREAD = TREE.find_class('thread')[0]

现在我想得到所有<p>直接子元素。

我累了:

THREAD.findall("p")

THREAD.xpath("//div[@class='thread']/p")

但是所有这些都返回所有 <p>这里面的元素 <div> , 不管那 <div>是否是他们最亲近的 parent 。

我怎样才能让它发挥作用?

编辑:

示例 html:

<div class='thread'>
<p> <!-- 1 -->
<!-- Can be some others <p> objects inside, which should not be counted -->
</p>
<p><!-- 2 --></p>
</div>
<div class='thread'>
<p>[...]</p>
<p>[...]</p>
</div>

脚本应该找到两个对象 <p> ,它们是 THREAD 的 child .我应该收到两个对象的列表,在示例 HTML 的注释中标记为“1”和“2”。

编辑 2:

又一次澄清,因为人们会感到困惑:

THREAD是一些存储在变量中的对象,可以是任何 html 元素。我想找到 <p> THREAD 的直接子对象.那些<p>的不能在外面THREAD或位于 THREAD 内的任何元素内.

最佳答案

我不确定,但您的问题似乎出在 HTML 本身:请注意 there are couple Tag omission cases applicable for p nodes , 所以段落的结束标签

<div class='thread'>
<p>first
<p>second</p>
</p>
</div>

简单地被解析器忽略,两个节点都被识别为兄弟节点,但不是父节点和子节点,例如

<div class='thread'>
<p>first
<p>second
</div>

所以 XPath //div[@class="thread"]/p 将返回两个段落

您可以简单地将 p 标签替换为 div 标签,您会看到不同的行为:

<div class='thread'>
<div>first
<div>second</div>
</div>
</div>

这里 //div[@class="thread"]/div 将只返回第一个节点

如果我的假设不正确,请指正

关于python - 如何在lxml中找到元素的直接子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548296/

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