Cara mengakses nilai atribut tag dengan BeautifulSoup

Saya menggunakan BeautifulSoup dan meminta web scraping. Saya tahu cara mengekstrak atribut antar tag, tetapi jika yang saya inginkan adalah nomor '4.31' di bawah dalam tag, adakah yang tahu cara mendapatkannya?

<div class="starRating" title="4.31">
<svg
 ...
</svg>
</div>

Saya sudah mencoba:

soup.find('div',{'class':'starRating'})
soup.find('title')

yang tidak menghasilkan apa-apa, jadi nomor tersebut pada dasarnya adalah tag...


person ilovebroccoli    schedule 28.12.2019    source sumber


Jawaban (2)


Anda dapat membaca nilai atribut title seperti ini:

from bs4 import BeautifulSoup


response = """
<html>
<div class="starRating" title="4.31">
<svg>
</svg>
</div>
</html>
"""

soup = BeautifulSoup(response, 'lxml')
print(soup.find('div', {'class': 'starRating'})['title'])

Keluaran:

4.31

Lihat https://www.crummy.com/software/BeautifulSoup/bs4/doc/#attributes `

Sebuah tag mungkin mempunyai sejumlah atribut. Tag <b id="boldest"> memiliki atribut “id” yang nilainya “paling tebal”. Anda dapat mengakses atribut tag dengan memperlakukan tag seperti kamus

person Dan-Dev    schedule 28.12.2019

Anda dapat menggunakan lambda untuk mengkueri elemen dengan atribut title yang cocok, lalu menggunakan kunci ["title"] untuk mengekstrak data yang Anda inginkan:

>>> soup.find(lambda x: x.name == "div" and "title" in x.attrs)["title"]
'4.31'

Atau gunakan pemilih CSS:

>>> soup.select_one("div[title]")
<div class="starRating" title="4.31"></div>

Lebih mudah lagi, gunakan atribut target sebagai kwarg:

>>> soup.find("div", title=True)
<div class="starRating" title="4.31"></div>

Mencoba menarik atribut title dari elemen yang tidak memilikinya akan memunculkan KeyError, jadi ada baiknya memfilter terlebih dahulu. Gunakan find_all atau select jika Anda ingin beberapa hasil yang dapat diulang.

person ggorlen    schedule 28.12.2019