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 otroslielementos con latestclase 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
aque son hijos de<li class=test>pero no los demás?"Dado el HTML a continuación (agregué otro
<a>para mostrar la diferencia entreselectyselect_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
Truetodas las etiquetas deseadas:Luego solo llama
find_allcon el argumento:fuente