Untuk pemula di web scraping dengan BeautifulSoup, artikel yang membahas konsep web scraping dengan library yang kuat ini dapat ditemukan di sini.
Artikel ini untuk programmer, analis data, ilmuwan atau insinyur yang sudah memiliki keahlian mengekstrak konten dari halaman web menggunakan BeautifulSoup. Jika Anda tidak memiliki pengetahuan tentang perpustakaan ini, saya menyarankan Anda untuk membaca tutorial BeautifulSoup untuk pemula.
Sekarang kita dapat melanjutkan - saya ingin percaya bahwa Anda telah menginstal perpustakaan ini. Jika tidak, Anda dapat melakukannya dengan menggunakan perintah di bawah ini:
instal pip BeautifulSoup4Karena kita bekerja dengan mengekstrak data dari HTML, kita perlu memiliki halaman HTML dasar untuk mempraktikkan konsep-konsep ini di. Untuk artikel ini, kami akan menggunakan cuplikan HTML ini untuk latihan. Saya akan menetapkan cuplikan HTML berikut ke variabel menggunakan tanda kutip tiga di Python.
sampel_konten = """
Untuk membuat daftar yang tidak berurutan, tag ul digunakan:
- Pilihan pertama
- Opsi kedua
Berikut adalah daftar yang tidak berurutan
Untuk membuat daftar yang diurutkan, tag ol digunakan:
- Nomor satu
- Nomor dua
Berikut daftar pesanannya
Petunjuk Linux, 2018
"""
Sekarang setelah kita memilahnya, mari langsung bekerja dengan perpustakaan BeautifulSoup.
Kami akan menggunakan beberapa metode dan atribut yang akan kami panggil pada objek BeautifulSoup kami. Namun, kita perlu mengurai string kita menggunakan BeautifulSoup dan kemudian menetapkan variabel "our_soup".
dari bs4 impor BeautifulSoup sebagai bsoour_soup = bso(konten_sampel, "lxml")
Untuk selanjutnya, kami akan bekerja dengan variabel "our_soup" dan memanggil semua atribut atau metode kami di atasnya.
Singkatnya, jika Anda belum tahu apa itu simpul anak, pada dasarnya simpul (tag) itu ada di dalam simpul lain. Dalam cuplikan HTML kami misalnya, tag li adalah simpul turunan dari tag “ul” dan “ol”.
Berikut adalah metode yang akan kita lihat:
- temukan anak
- temukanAnak-anak
- isi
- anak-anak
- keturunan
temukanAnak():
Itu temukan anak metode yang digunakan untuk menemukan simpul anak pertama dari elemen HTML. Misalnya ketika kita melihat tag "ol" atau "ul" kita, kita akan menemukan dua tag anak di dalamnya. Namun ketika kita menggunakan temukan anak metode, itu hanya mengembalikan simpul pertama sebagai simpul anak.
Metode ini terbukti sangat berguna ketika kita hanya ingin mendapatkan simpul anak pertama dari elemen HTML, karena metode ini segera mengembalikan hasil yang diperlukan.
Objek yang dikembalikan bertipe bs4.elemen.Menandai. Kita dapat mengekstrak teks darinya dengan memanggil atribut teks di atasnya.
Berikut ini contohnya:
first_child = sup_kita.temukan("tubuh").temukan("ol")cetak(anak_pertama.temukanAnak())
Kode di atas akan mengembalikan yang berikut:
Untuk mendapatkan teks dari tag, kami memanggil teks atribut di atasnya.
Suka:
cetak(anak_pertama.temukanAnak().teks)Untuk mendapatkan hasil sebagai berikut:
'Nomor satu'temukanAnak():
Kami telah melihat temukan anak metode dan melihat cara kerjanya. Itu temukanAnak-anak metode ini bekerja dengan cara yang serupa, namun seperti namanya, metode ini tidak hanya menemukan satu simpul anak, ia mendapatkan semua simpul anak dalam sebuah tag.
Saat Anda perlu mendapatkan semua simpul anak dalam sebuah tag, temukanAnak-anak metode adalah cara untuk pergi. Metode ini mengembalikan semua node anak dalam daftar, Anda dapat mengakses tag pilihan Anda menggunakan nomor indeksnya.
Berikut ini contohnya:
first_child = sup_kami.temukan("tubuh").temukan("ol")cetak(anak_pertama.temukanAnak-anak())
Ini akan mengembalikan node anak-anak dalam daftar:
[Untuk mendapatkan simpul anak kedua dalam daftar, kode berikut akan melakukan pekerjaan:
cetak(anak_pertama.temukanAnak()[1])Untuk mendapatkan hasil sebagai berikut:
Hanya itu yang disediakan BeautifulSoup dalam hal metode. Namun, itu tidak berakhir di situ. Atribut juga dapat dipanggil pada objek BeautifulSoup kami untuk mendapatkan simpul anak/anak/keturunan dari elemen HTML.
isi:
Selagi temukanAnak-anak metode melakukan pekerjaan langsung mengekstraksi node anak-anak, the isi atribut melakukan sesuatu yang sedikit berbeda.
Itu isi atribut mengembalikan daftar semua konten dalam elemen HTML, termasuk node anak. Jadi ketika Anda memanggil isi atribut pada objek BeautifulSoup, itu akan mengembalikan teks sebagai string dan node dalam tag sebagai bs4.elemen.Menandai obyek.
Berikut ini contohnya:
first_child = sup_kita.temukan("tubuh").temukan("ol")cetak(anak_pertama.isi)
Ini mengembalikan yang berikut:
["\n Berikut adalah daftar pesanan\n ",'\n',
Seperti yang Anda lihat, daftar berisi teks yang muncul sebelum simpul anak, simpul anak, dan teks yang muncul setelah simpul anak.
Untuk mengakses node anak kedua, yang perlu kita lakukan adalah menggunakan nomor indeksnya seperti yang ditunjukkan di bawah ini:
cetak(anak_pertama.isi[3])Ini akan mengembalikan yang berikut:
anak-anak:
Berikut adalah satu atribut yang melakukan hal yang hampir sama dengan atribut isi. Namun, ia memiliki satu perbedaan kecil yang dapat membuat dampak besar (bagi mereka yang menganggap serius pengoptimalan kode).
Atribut anak-anak juga mengembalikan teks yang datang sebelum simpul anak, simpul anak itu sendiri dan teks yang muncul setelah simpul anak. Perbedaannya di sini adalah mengembalikannya sebagai generator alih-alih daftar.
Mari kita lihat contoh berikut:
first_child = sup_kami.temukan("tubuh").temukan("ol")cetak(anak_pertama.anak-anak)
Kode di atas memberikan hasil berikut (alamat di mesin Anda tidak harus sama dengan yang di bawah):
Seperti yang Anda lihat, itu hanya mengembalikan alamat generator. Kita bisa mengubah generator ini menjadi daftar.
Hal ini dapat kita lihat pada contoh di bawah ini:
first_child = sup_kita.temukan("tubuh").temukan("ol")print(daftar(first_child.anak-anak))
Ini memberikan hasil berikut:
["\n Berikut daftar pesanan\n ",'\n',
keturunan:
Selagi anak-anak atribut berfungsi untuk mendapatkan hanya konten di dalam tag i.e. teks, dan node pada tingkat pertama, the keturunan atribut masuk lebih dalam dan melakukan lebih banyak.
Itu keturunan atribut mendapatkan semua teks dan simpul yang ada di simpul anak. Jadi itu tidak hanya mengembalikan simpul anak, ia juga mengembalikan simpul cucu.
Selain mengembalikan teks dan tag, itu juga mengembalikan konten dalam tag sebagai string juga.
Sama seperti anak-anak atribut, keturunan mengembalikan hasilnya sebagai generator.
Kita bisa melihat ini di bawah ini:
first_child = sup_kita.temukan("tubuh").temukan("ol")cetak(anak_pertama.keturunan)
Ini memberikan hasil berikut:
Seperti yang terlihat sebelumnya, kita kemudian dapat mengonversi objek generator ini menjadi daftar:
first_child = sup_kami.temukan("tubuh").temukan("ol")print(daftar(first_child.keturunan))
Kami akan mendapatkan daftar di bawah ini:
["\n Berikut adalah daftar pesanan\n ",'Nomor Satu', '\n',
Kesimpulan
Itu dia, lima cara berbeda untuk mengakses node anak dalam elemen HTML. Mungkin ada lebih banyak cara, namun dengan metode dan atribut yang dibahas dalam artikel ini, seseorang harus dapat mengakses simpul anak dari elemen HTML apa pun.