2010-03-24 13 views
5

Tengo un documento como este:Uso BeautifulSoup para extraer nodos hermanos entre dos nodos

<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> 

Quiero extraer todo entre la clase [final] = párrafos p [class = arriba] y p.

¿Hay alguna buena manera de hacerlo con BeautifulSoup?

Respuesta

8

node.nextSibling atributo es su solución:

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 

Esta condición es complicada para asegurarse de que obtiene acceso a los atributos de etiqueta HTML y no los nodos de cuerda.

Cuestiones relacionadas