2012-05-27 13 views
6

Quindi sto cercando un modo per trovare tutti gli elementi all'interno di un oggetto BeautifulSoup che hanno un determinato tag che non si trova all'interno di un certo altro tag. Per esempio:BeautifulSoup - findAll non all'interno di alcuni tag

<td class="disabled first"> <div class="dayContainer"> 
     <p class="day"> 29 
     </p> <p class="moreLink"> 
     </p> 
    </div> 
</td> 

voglio trovare tutte le iterazioni di class="dayContainer", il che è abbastanza semplice, ma come posso fare per trovare tutti quelli che non sono in primo luogo all'interno class="diabled"?

risposta

7

Eseguire un filtro per i tag il cui .parent non ha quell'attributo di classe. Qualcosa come

filteredDayContainers = [tag for tag in soup.find_all('div', 
    attrs = {'class': 'dayContainer'}) 
    if "disabled" not in tag.parent['class']] 
+0

Grazie! Tuttavia, continua a tornare con 'NoneType object is not callable'. Qualche idea sul perché potrebbe essere? – westbyb

+0

Prova ad isolare il problema - quale oggetto si sta rivelando essere "Nessuno"? È una zuppa? tag.parent? Suppongo che tu stia eseguendo BeautifulSoup sulla tua stringa HTML e memorizzando il risultato come 'soup' ... – Ansari

+0

Scratch that. Usato find_all invece di findAll. Silly me. Problema risolto, il tuo consiglio è stato il trucco! – westbyb

Problemi correlati