beautifulsoup: 找到第n个元素的兄弟元素

8 投票
2 回答
8796 浏览
提问于 2025-04-15 21:27

我有一个复杂的HTML结构,像这样:

<table>
    ...
    <tr>
        <td>
            ...
        </td>
        <td>
            <table>
                <tr>
                    <td>
                        <!-- inner most table -->
                        <table>
                            ...
                        </table>

                        <h2>This is hell!</h2>
                    <td>
                </tr>
            </table>
        </td>
    </tr>
</table>

我有一些逻辑可以找到最里面的表格。但是在找到它之后,我需要获取下一个兄弟元素(h2)。有没有什么方法可以做到这一点呢?

2 个回答

1

每个标签对象都有一个叫做 nextSibling 的属性,这个属性正是你需要的——它表示下一个兄弟标签(如果这个标签是它父标签的最后一个孩子,那么它的值就是 None)。

10

如果tag是最里面的表格,那么

tag.findNextSibling('h2')

将会是

<h2>This is hell!</h2>

如果你想要直接获取下一个兄弟节点,可以使用tag.nextSibling,在这个例子中,它的值是u'\n'

如果你想要获取下一个不是导航字符串的兄弟节点(比如说u'\n'),你可以使用

tag.findNextSibling(text=None)

如果你想要获取第二个兄弟节点(不管它是什么),你可以使用

tag.nextSibling.nextSibling

(但要注意,如果tag没有下一个兄弟节点,那么tag.nextSibling会是None,而tag.nextSibling.nextSibling会引发一个AttributeError错误。)

撰写回答