beautifulsoup: найдите одноуровневый элемент энного элемента

У меня есть сложный HTML дерево DOM следующей природы:

<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). Есть ли так или иначе, можно ли сделать это?

8
задан deostroll 10 April 2010 в 13:25
поделиться

2 ответа

Если tag является самой внутренней таблицей, то

tag.findNextSibling('h2')

будет

<h2>This is hell!</h2>

Чтобы буквально получить следующего брата или сестру, вы можете использовать tag.nextSibling, который в данном случае будет u'\n'.

Если вам нужен следующий брат или сестра, который не является NavigableString (например, u'\n'), то вы можете использовать

tag.findNextSibling(text=None)

Если вам нужен второй брат или сестра (не важно, что это), то вы можете использовать

tag.nextSibling.nextSibling

(но обратите внимание, что если у tag нет следующего брата или сестры, то tag. nextSibling будет None, а tag.nextSibling.nextSibling вызовет AttributeError.)

.
9
ответ дан 5 December 2019 в 17:35
поделиться

Каждый объект тега имеет атрибут nextSibling - именно то, что вы ищете - следующий брат или сестра (или None для тега, который является последним ребенком своего родительского тега, конечно).

1
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: