2012-05-27 6 views
6

Estoy tratando de encontrar una manera de encontrar todos los artículos dentro de un objeto BeautifulSoup que tienen una etiqueta determinada que no están dentro de otra etiqueta determinada. Por ejemplo:BeautifulSoup - findTodavía no dentro de cierta etiqueta

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

Quiero encontrar todas las iteraciones de class="dayContainer", lo cual es bastante simple, pero ¿cómo hago para encontrar todos aquellos que no son en primer lugar dentro class="diabled"?

Respuesta

7

Ejecute un filtro para las etiquetas cuyo .parent no tiene ese atributo de clase. Algo así como

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

Gracias! Sin embargo, sigue volviendo con 'NoneType object no se puede llamar'. ¿Alguna idea de por qué podría ser? – westbyb

+0

Trate de aislar el problema, ¿qué objeto se está convirtiendo en 'Ninguno'? ¿Es sopa? tag.parent? Supongo que está ejecutando BeautifulSoup en su cadena de HTML y almacenando el resultado como "sopa" ... – Ansari

+0

Raspe eso. Usado find_all en lugar de findAll. Tonto de mí. Problema resuelto, tu sugerencia hizo el truco! – westbyb

Cuestiones relacionadas