Используйте BeautifulSoup для извлечения родственных узлов между двумя узлами - PullRequest
7 голосов
/ 24 марта 2010

У меня есть такой документ:

<p class="top">I don't want this</p>

<p>I want this</p>
<table>
   <!-- ... -->
</table>

<img ... />

<p> and all that stuff too</p>

<p class="end>But not this and nothing after it</p>

Я хочу извлечь все между параграфами p [class = top] и p [class = end].

Есть ли хороший способ сделать это с BeautifulSoup?

1 Ответ

8 голосов
/ 24 марта 2010

node.nextSibling атрибут - ваше решение:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(html)

nextNode = soup.find('p', {'class': 'top'})
while True:
    # process
    nextNode = nextNode.nextSibling
    if getattr(nextNode, 'name', None)  == 'p' and nextNode.get('class', None) == 'end':
        break

Это сложное условие - убедиться, что вы обращаетесь к атрибутам тега HTML, а не к строковым узлам.

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