Ich möchte alle <a>
Tags erhalten, die Kinder von <li>
:
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
</li>
</div>
Ich weiß, wie man ein Element mit einer bestimmten Klasse wie dieser findet:
soup.find("li", { "class" : "test" })
Aber ich weiß nicht, wie ich alle finden soll, von <a>
denen Kinder sind, <li class=test>
aber keine anderen.
Wie ich auswählen möchte:
<a>link1</a>
python
html
beautifulsoup
tej.tan
quelle
quelle
soup.find('li', {'class': 'text'}).findChildren()
.find(li).find(a).firstChild()
Es gibt einen super kleinen Abschnitt in den DOCs, der zeigt, wie man / find_all direkte Kinder findet.
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument
In Ihrem Fall, wie Sie möchten link1, das erste direkte Kind ist:
Wenn Sie alle direkten Kinder wollen:
quelle
Vielleicht willst du das tun
quelle
<a> link2 </a>
aber ich will das nicht<a>link1</a>
in dem in der Frage angegebenen HTML-Code ausgewählt werden soll. Dies schlägt jedoch fehl, wenn der erste<li class="test">
keine<a>
Elemente enthält und andereli
Elemente mit einertest
Klasse enthalten sind<a>
.Versuche dies:
andere Erinnerungen:
Die find-Methode ruft nur das erste vorkommende untergeordnete Element ab. Die find_all-Methode ruft alle untergeordneten Elemente ab und wird in einer Liste gespeichert.
quelle
"Wie finde ich alle, von
a
denen Kinder sind,<li class=test>
aber keine anderen?"Angesichts des folgenden HTML-Codes (ich habe einen weiteren hinzugefügt
<a>
, um den Unterschied zwischenselect
und zu zeigenselect_one
):Die Lösung besteht darin, den untergeordneten Kombinator (
>
) zu verwenden, der zwischen zwei CSS-Selektoren platziert wird:Falls Sie nur das erste Kind finden möchten:
quelle
Noch eine andere Methode: Erstellen Sie eine Filterfunktion, die
True
für alle gewünschten Tags zurückgibt :Dann rufen Sie einfach
find_all
mit dem Argument an:quelle