BeautifulSoup: найти родного брата n-го элемента - PullRequest
8 голосов
/ 10 апреля 2010

У меня сложное 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). Есть ли в любом случае вы можете сделать это?

Ответы [ 2 ]

9 голосов
/ 10 апреля 2010

Если 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.)

0 голосов
/ 10 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...