Beautiful Soup - Jenis benda
Ketika kita memberikan dokumen atau string html ke konstruktor beautifulsoup, beautifulsoup pada dasarnya mengubah halaman html kompleks menjadi objek python yang berbeda. Di bawah ini kita akan membahas empat jenis objek utama:
Tag
NavigableString
BeautifulSoup
Comments
Tandai Objek
Sebuah tag HTML digunakan untuk menentukan berbagai jenis konten. Objek tag di BeautifulSoup sesuai dengan tag HTML atau XML di halaman atau dokumen sebenarnya.
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<b class="boldest">TutorialsPoint</b>')
>>> tag = soup.html
>>> type(tag)
<class 'bs4.element.Tag'>
Tag mengandung banyak atribut dan metode dan dua fitur penting dari sebuah tag adalah nama dan atributnya.
Nama (tag.name)
Setiap tag berisi nama dan dapat diakses melalui '.name' sebagai akhiran. tag.name akan mengembalikan jenis tag itu.
>>> tag.name
'html'
Namun, jika kita mengubah nama tag, hal yang sama akan tercermin dalam markup HTML yang dibuat oleh BeautifulSoup.
>>> tag.name = "Strong"
>>> tag
<Strong><body><b class="boldest">TutorialsPoint</b></body></Strong>
>>> tag.name
'Strong'
Atribut (tag.attrs)
Objek tag dapat memiliki sejumlah atribut. Tag <b class = ”boldest”> memiliki atribut 'class' yang nilainya “paling tebal”. Apa pun yang bukan tag, pada dasarnya adalah atribut dan harus mengandung nilai. Anda dapat mengakses atribut baik melalui akses kunci (seperti mengakses "kelas" dalam contoh di atas) atau langsung mengakses melalui ".attrs"
>>> tutorialsP = BeautifulSoup("<div class='tutorialsP'></div>",'lxml')
>>> tag2 = tutorialsP.div
>>> tag2['class']
['tutorialsP']
Kita dapat melakukan semua jenis modifikasi pada atribut tag kita (menambah / menghapus / memodifikasi).
>>> tag2['class'] = 'Online-Learning'
>>> tag2['style'] = '2007'
>>>
>>> tag2
<div class="Online-Learning" style="2007"></div>
>>> del tag2['style']
>>> tag2
<div class="Online-Learning"></div>
>>> del tag['class']
>>> tag
<b SecondAttribute="2">TutorialsPoint</b>
>>>
>>> del tag['SecondAttribute']
>>> tag
</b>
>>> tag2['class']
'Online-Learning'
>>> tag2['style']
KeyError: 'style'
Atribut multi-nilai
Beberapa atribut HTML5 dapat memiliki banyak nilai. Paling umum digunakan adalah atribut-kelas yang dapat memiliki beberapa nilai CSS. Lainnya termasuk 'rel', 'rev', 'headers', 'accesskey' dan 'accept-charset'. Atribut multi-nilai dalam sup yang indah ditampilkan sebagai daftar.
>>> from bs4 import BeautifulSoup
>>>
>>> css_soup = BeautifulSoup('<p class="body"></p>')
>>> css_soup.p['class']
['body']
>>>
>>> css_soup = BeautifulSoup('<p class="body bold"></p>')
>>> css_soup.p['class']
['body', 'bold']
Namun, jika ada atribut yang berisi lebih dari satu nilai tetapi bukan atribut multi-nilai menurut standar HTML versi apa pun, sup cantik akan meninggalkan atribut itu sendiri -
>>> id_soup = BeautifulSoup('<p id="body bold"></p>')
>>> id_soup.p['id']
'body bold'
>>> type(id_soup.p['id'])
<class 'str'>
Anda dapat menggabungkan beberapa nilai atribut jika Anda mengubah tag menjadi string.
>>> rel_soup = BeautifulSoup("<p> tutorialspoint Main <a rel='Index'> Page</a></p>")
>>> rel_soup.a['rel']
['Index']
>>> rel_soup.a['rel'] = ['Index', ' Online Library, Its all Free']
>>> print(rel_soup.p)
<p> tutorialspoint Main <a rel="Index Online Library, Its all Free"> Page</a></p>
Dengan menggunakan 'get_attribute_list', Anda mendapatkan nilai yang selalu berupa daftar, string, terlepas dari apakah itu multi-nilai atau tidak.
id_soup.p.get_attribute_list(‘id’)
Namun, jika Anda mengurai dokumen sebagai 'xml', tidak ada atribut multi-nilai -
>>> xml_soup = BeautifulSoup('<p class="body bold"></p>', 'xml')
>>> xml_soup.p['class']
'body bold'
NavigableString
Objek navigablestring digunakan untuk mewakili konten dari sebuah tag. Untuk mengakses konten, gunakan “.string” dengan tag.
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>")
>>>
>>> soup.string
'Hello, Tutorialspoint!'
>>> type(soup.string)
>
Anda dapat mengganti string dengan string lain tetapi Anda tidak dapat mengedit string yang ada.
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>")
>>> soup.string.replace_with("Online Learning!")
'Hello, Tutorialspoint!'
>>> soup.string
'Online Learning!'
>>> soup
<html><body><h2 id="message">Online Learning!</h2></body></html>
BeautifulSoup
BeautifulSoup adalah objek yang dibuat saat kami mencoba mengikis sumber daya web. Jadi, dokumen lengkaplah yang kami coba kikis. Sebagian besar waktu, itu diperlakukan sebagai objek tag.
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<h2 id='message'>Hello, Tutorialspoint!</h2>")
>>> type(soup)
<class 'bs4.BeautifulSoup'>
>>> soup.name
'[document]'
Komentar
Objek komentar mengilustrasikan bagian komentar dari dokumen web. Ini hanyalah jenis khusus dari NavigableString.
>>> soup = BeautifulSoup('<p><!-- Everything inside it is COMMENTS --></p>')
>>> comment = soup.p.string
>>> type(comment)
<class 'bs4.element.Comment'>
>>> type(comment)
<class 'bs4.element.Comment'>
>>> print(soup.p.prettify())
<p>
<!-- Everything inside it is COMMENTS -->
</p>
Objek NavigableString
Objek navigablestring digunakan untuk merepresentasikan teks di dalam tag, bukan tag itu sendiri.