Quero obter todas as <a>
tags que são filhas de <li>
:
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
</li>
</div>
Eu sei como encontrar um elemento com uma classe particular como este:
soup.find("li", { "class" : "test" })
Mas não sei como encontrar todos <a>
os filhos de, <li class=test>
mas nenhum outro.
Como desejo selecionar:
<a>link1</a>
python
html
beautifulsoup
tej.tan
fonte
fonte
soup.find('li', {'class': 'text'}).findChildren()
.find(li).find(a).firstChild()
Há uma seção super pequena nos DOCs que mostra como localizar / localizar todos os filhos diretos .
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument
No seu caso, como você deseja link1, que é o primeiro filho direto:
Se você quiser todos os filhos diretos:
fonte
Talvez você queira fazer
fonte
<a> link2 </a>
, mas não quero isso<a>link1</a>
no HTML fornecido na questão, mas irá FALHAR quando o primeiro<li class="test">
não conter<a>
elementos e houver outrosli
elementos comtest
classe que contém<a>
.tente isto:
outros lembretes:
O método find obtém apenas o primeiro elemento filho que ocorre. O método find_all obtém todos os elementos descendentes e são armazenados em uma lista.
fonte
"Como descobrir todos os
a
que são filhos,<li class=test>
mas nenhum outro?"Dado o HTML abaixo (adicionei outro
<a>
para mostrar a diferença entreselect
eselect_one
):A solução é usar o combinador filho (
>
) que é colocado entre dois seletores CSS:Caso você queira encontrar apenas o primeiro filho:
fonte
Ainda outro método - crie uma função de filtro que retorna
True
para todas as tags desejadas:Em seguida, basta chamar
find_all
com o argumento:fonte