Quiero obtener todas las <a>
etiquetas que son secundarias de <li>
:
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
</li>
</div>
Sé cómo encontrar un elemento con una clase particular como esta:
soup.find("li", { "class" : "test" })
Pero no sé cómo encontrar a todos los <a>
que son hijos de <li class=test>
pero no a los demás.
Como quiero seleccionar:
<a>link1</a>
python
html
beautifulsoup
tej.tan
fuente
fuente
soup.find('li', {'class': 'text'}).findChildren()
.find(li).find(a).firstChild()
Hay una sección muy pequeña en los DOC que muestra cómo buscar / encontrar a todos los niños directos .
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument
En su caso, como desea link1, que es el primer hijo directo:
Si quieres todos los hijos directos:
fuente
Tal vez quieras hacer
fuente
<a> link2 </a>
, pero no quiero eso<a>link1</a>
en el HTML dado en la pregunta, pero esto FALLARÁ cuando el primero<li class="test">
no contenga<a>
elementos y haya otrosli
elementos con latest
clase que contiene<a>
.prueba esto:
otros recordatorios:
El método de búsqueda solo obtiene el primer elemento hijo que aparece. El método find_all obtiene todos los elementos descendientes y se almacenan en una lista.
fuente
"Cómo encontrar todos los
a
que son hijos de<li class=test>
pero no los demás?"Dado el HTML a continuación (agregué otro
<a>
para mostrar la diferencia entreselect
yselect_one
):La solución es usar un combinador secundario (
>
) que se coloca entre dos selectores CSS:En caso de que quiera encontrar solo al primer hijo:
fuente
Otro método más: cree una función de filtro que devuelva
True
todas las etiquetas deseadas:Luego solo llama
find_all
con el argumento:fuente