2010-03-24 6 views
5

J'ai un document comme celui-ci:Utilisez BeautifulSoup pour extraire nœuds frères entre deux noeuds

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

Je veux extraire tout entre le p [class = haut] et p [class = fin] paragraphes.

Y a-t-il une façon sympa de faire ça avec BeautifulSoup?

Répondre

8

node.nextSibling attribut est votre solution:

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 

Cette condition est complexe pour être sûr que vous accédez à des attributs de balise HTML et non noeuds de chaîne.

Questions connexes