Saya ingin mendapatkan semua <a>
tag yang merupakan anak dari <li>
:
<div>
<li class="test">
<a>link1</a>
<ul>
<li>
<a>link2</a>
</li>
</ul>
</li>
</div>
Saya tahu cara menemukan elemen dengan kelas tertentu seperti ini:
soup.find("li", { "class" : "test" })
Tetapi saya tidak tahu bagaimana menemukan semua <a>
yang merupakan anak-anak <li class=test>
tetapi tidak yang lain.
Seperti saya ingin memilih:
<a>link1</a>
python
html
beautifulsoup
tej.tan
sumber
sumber
soup.find('li', {'class': 'text'}).findChildren()
.find(li).find(a).firstChild()
Ada bagian super kecil di DOC yang menunjukkan cara menemukan / find_all mengarahkan anak-anak.
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument
Dalam kasus Anda karena Anda menginginkan link1 yang merupakan anak langsung pertama:
Jika Anda ingin semua anak langsung:
sumber
Mungkin Anda ingin melakukannya
sumber
<a> link2 </a>
juga tetapi saya tidak menginginkannya<a>link1</a>
dalam HTML yang diberikan dalam pertanyaan, tetapi ini akan GAGAL ketika yang pertama tidak<li class="test">
akan berisi<a>
elemen dan adali
elemen lain dengantest
kelas yang berisi<a>
.coba ini:
pengingat lainnya:
Metode find hanya mendapatkan elemen turunan pertama yang muncul. Metode find_all mendapatkan semua elemen turunan dan disimpan dalam daftar.
sumber
"Bagaimana menemukan semua
a
yang merupakan anak-anak<li class=test>
tetapi tidak yang lain?"Diberikan HTML di bawah ini (saya menambahkan yang lain
<a>
untuk menunjukkan perbedaan antaraselect
danselect_one
):Solusinya adalah dengan menggunakan kombinator anak (
>
) yang ditempatkan di antara dua pemilih CSS:Jika Anda hanya ingin menemukan anak pertama:
sumber
Metode lain - buat fungsi filter yang mengembalikan
True
semua tag yang diinginkan:Kemudian panggil saja
find_all
dengan argumen:sumber