Cómo obtener un elemento anidado en la hermosa sopa
-
21-08-2019 - |
Pregunta
Estoy luchando con la sintaxis requerida que consigan unas hrefs en un td. Los elementos de la tabla, tr y td no tienen o identificadores de ninguna clase.
Si quería agarrar el ancla en este ejemplo, lo que voy a necesitar?
Gracias
Solución
De acuerdo con los documentos, primero se crea un árbol de análisis:
import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)
y luego buscar en ella, por ejemplo, para <a>
etiquetas cuyo padre inmediato es un <td>
:
for ana in soup.findAll('a'):
if ana.parent.name == 'td':
print ana["href"]
Otros consejos
Algo como esto?
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]
Esto debería encontrar la primera "a" dentro de cada "TD" en el HTML que proporcionan. Se pueden ajustar td.find
ser más concreto o bien utilizar findAll
si tiene varios enlaces dentro de cada td.
ACTUALIZACIÓN: Re comentario de Daniele, si usted quiere asegurarse de que usted no tiene ningún None
's en la lista, entonces se podría modificar la lista de la comprensión de este modo:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]
Lo que básicamente sólo se suma una comprobación para ver si tiene un elemento real devuelto por td.find('a')
.