Web scraping dengan BeautifulSoup dan Selenium: panduan lengkap

  • BeautifulSoup dan Requests sangat ideal untuk pengambilan data statis (static scraping) dari HTML yang sudah dirender dari server.
  • Selenium memungkinkan Anda untuk memuat JavaScript, menangani iframe, dan mensimulasikan tindakan pengguna pada halaman dinamis.
  • Menggabungkan Selenium untuk rendering dan BeautifulSoup untuk parsing memberikan fleksibilitas dan presisi.
  • Etika, penghormatan terhadap robots.txt, dan manajemen kesalahan yang baik adalah kunci dalam setiap proyek scraping.

Pengambilan data web menggunakan BeautifulSoup dan Selenium.

Saat atasan Anda bertanya kepada Anda Memantau harga pesaing, menganalisis ulasan, atau mengumpulkan data dari ratusan halaman.Menyalin dan menempel secara manual bukan lagi pilihan. Anda membutuhkan cara untuk mengotomatiskan ekstraksi informasi tanpa membuat diri Anda frustrasi atau membuang waktu berjam-jam untuk tugas-tugas yang berulang.

Dalam ekosistem Python, dua alat yang paling sering Anda dengar untuk hal ini adalah... BeautifulSoup dan SeleniumYang satu unggul dalam menganalisis HTML dengan cepat dan mudah; yang lain dapat membuka browser sungguhan, menjalankan JavaScript, mengklik, mengisi formulir, dan berperilaku seperti pengguna manusia. Kuncinya adalah memahaminya dengan baik. Kapan menggunakan masing-masing dan bagaimana menggabungkannya? untuk mendapatkan manfaat maksimal darinya.

Apa itu web scraping dan kapan penggunaannya masuk akal?

Pengambilan data dari web (web scraping) tidak lebih dari sekadar proses mengekstraksi data dari halaman webAnda bisa melakukannya dengan menyalin dan menempel, tetapi seiring bertambahnya jumlah informasi, akan lebih masuk akal untuk mengandalkan skrip atau alat otomatis yang menelusuri halaman dan menyimpan informasi yang Anda minati.

Dengan melakukan scraping, Anda bisa Mengumpulkan daftar produk dan harga, berita, ulasan, komentar, dan unggahan media sosial. atau hampir semua konten yang tersedia untuk umum di web. Pada dasarnya, ini adalah langkah awal untuk banyak proyek analisis data, pembelajaran mesin, atau otomatisasi tugas.

Namun, penting untuk memperjelas kapan scraping harus menjadi strategi Anda. Sebagai pilihan terakhir, bukan yang pertama.Jika situs tersebut sudah menawarkan API resmi yang terdokumentasi dengan baik, biasanya lebih baik untuk menggunakannya: API tersebut lebih stabil, biasanya memiliki batasan penggunaan yang jelas, dan mengurangi risiko kerusakan atau pelanggaran ketentuan layanan.

Proses scraping mulai masuk akal ketika Tidak ada API, API tidak lengkap, atau Anda memerlukan data yang hanya muncul di antarmuka web.seperti komentar yang disematkan, peringkat, tag kecil, atau blok konten yang dihasilkan secara dinamis.

Penting juga untuk membedakan antara dua konsep yang sering membingungkan: pengambilan data dari web dan penelusuran webScraping berfokus pada pengambilan data spesifik dari halaman tertentu; sedangkan crawling, di sisi lain, dikhususkan untuk untuk mengeksplorasi dan memetakan struktur suatu situs atau seluruh web.dengan mengikuti tautan, sama seperti yang dilakukan mesin pencari untuk mengindeks konten.

Aspek hukum dan etika: hal-hal yang tidak boleh Anda abaikan.

Sebelum Anda meluncurkan scraper Anda secara gegabah, ada baiknya meluangkan waktu sejenak untuk memikirkan hal-hal berikut: implikasi hukum, teknis, dan etikaMengambil data dari situs web Anda sendiri atau proyek akademis tidak sama dengan mendirikan layanan komersial berdasarkan data orang lain.

Hal pertama yang perlu diperiksa adalah apakah Anda mematuhi peraturan perundang-undangan negara atau wilayah AndaIsu-isu seperti perlindungan data, privasi, dan penggunaan informasi pribadi dapat sangat bervariasi dari satu tempat ke tempat lain, jadi sebaiknya jangan diabaikan. Jika Anda akan bekerja dengan data sensitif atau data yang dapat diidentifikasi, sebaiknya berkonsultasi dengan seseorang yang memiliki pengetahuan tentang hukum teknologi.

Langkah selanjutnya adalah memeriksa apakah situs tersebut memiliki ketentuan penggunaan yang melarang pengambilan data (scraping)Banyak portal menyertakan klausul khusus dalam Syarat dan Ketentuan mereka mengenai pengambilan data otomatis, penggunaan informasi untuk tujuan komersial, atau akses tidak sah ke bagian-bagian tertentu.

Ada satu hal penting yang hampir selalu harus Anda perhatikan: file tersebut. robots.txtAnda akan menemukannya di direktori utama domain, kurang lebih seperti ini: https://www.ejemplo.com/robots.txtDi sana, pemilik menunjukkan rute mana yang tidak ingin mereka jelajahi atau diindeks, misalnya melalui arahan seperti melarang untuk memblokir rute atau Penundaan perayapan untuk memastikan penundaan minimum antara permintaan.

Menghormati pedoman ini bukan hanya masalah etika, tetapi juga sebuah cara untuk Jangan membebani server dengan ratusan permintaan per detik.Program pengikis data (scraper) yang dirancang dengan buruk dapat menyerupai serangan penolakan layanan (denial-of-service attack), dan selain tidak elegan, hal itu dapat menimbulkan masalah bagi Anda.

Terakhir, tanyakan pada diri Anda apakah Penggunaan data yang Anda maksudkan adalah wajar.Apakah Anda akan mendistribusikannya apa adanya? Apakah Anda akan mencampurnya dengan sumber lain? Apakah ini untuk proyek internal atau untuk menjual kembali informasi? Pertanyaan-pertanyaan ini sangat memengaruhi risiko dan bagaimana Anda harus merancang solusi Anda.

Bagaimana sebuah halaman web benar-benar dimuat: HTML, CSS, JavaScript, dan iframe.

Untuk melakukan scraping secara efektif, sangat penting untuk memahami apa yang sebenarnya dilihat skrip Anda saat melakukan permintaan. Dalam kondisi ideal, halaman yang diterima dari server seharusnya sudah menyertakan informasi yang dibutuhkan. Semua kode HTML dengan konten yang Anda minatiDan yang akan dilakukan browser hanyalah menatanya dengan CSS dan menambahkan sedikit interaktivitas dengan JavaScript.

Realitanya tidak seindah yang dibayangkan: banyak situs web modern Mereka memuat data secara tertunda menggunakan JavaScript, dan menyematkan konten pihak ketiga dengan iframe. atau mereka menulis ulang DOM secara langsung. Jika Anda membuka menu "Lihat Kode Sumber" klasik browser, terkadang Anda tidak akan melihat jejak komentar, penghitung, atau blok dinamis yang muncul di layar.

Contoh tipikalnya adalah sistem komentar seperti DisqusHTML asli mungkin tidak mengandung satu baris komentar pun, tetapi DOM akhir yang dihasilkan oleh browser mungkin mengandung satu baris komentar. iframe yang dibuat oleh JavaScript di mana seluruh thread dimuat. Jika Anda mencoba melakukan static scraping pada halaman tersebut, Anda akan mendapatkan HTML yang "cacat".

Dalam skenario seperti ini, strateginya meliputi: mensimulasikan apa yang dilakukan browser sebenarnya.Muat halaman, jalankan JavaScript, tunggu hingga elemen yang Anda minati muncul, dan baru kemudian ekstrak kontennya. Di situlah Selenium berperan.

Pengambilan data statis dengan Requests dan BeautifulSoup

Ketika konten yang Anda butuhkan sudah ada dalam HTML awal (produk umum, berita, tabel sederhana, daftar statis), pendekatan yang paling efisien biasanya adalah dengan menggunakan Permintaan untuk melakukan permintaan HTTP dan BeautifulSoup untuk mengurai HTML.Ini adalah pasangan klasik untuk mengikis dengan ringan dan cepat.

Alur dasarnya sederhana: pertama-tama Anda mengirim permintaan dengan permintaan.dapatkan(url) dan Anda menganalisis responsnya. Dengan objek di tangan, Anda dapat melihat kode status dengan status_code, konten tekstual dengan text, atau konten biner dengan content.Selain itu, periksa juga header dan URL akhir untuk lebih memahami apa yang dikembalikan oleh server.

Setelah Anda memiliki kode HTML, Anda meneruskannya ke BeautifulSoup, biasanya dengan cara seperti ini: Sup Cantik(html, "html.parser")Parser tersebut memecah teks menjadi struktur pohon yang jauh lebih nyaman untuk mencari tag, atribut, dan konten bersarang.

Dengan objek sup tersebut, Anda sekarang dapat menggunakan metode seperti: cari, cari_semua atau pilih untuk menemukan node tertentu: misalnya, semua yang berisi tutorial, baris-baris tabel, tautan di bagian berita. atau bagian mana pun dari halaman yang memiliki struktur HTML yang cukup koheren.

Contoh tipikalnya adalah menyiapkan scraper untuk surat kabar digital seperti Página 12. Anda dapat membuat permintaan ke halaman depan, Uraikan blok bagian, temukan tautan berita. Dari situ, sistem akan secara sistematis menavigasi untuk menampilkan judul berita, tanggal, teks isi, gambar utama, dan data apa pun yang Anda minati, lalu mengemasnya ke dalam kamus yang siap disimpan dalam basis data.

Pada program pengikis data ini, disarankan untuk menambahkan logika ke penanganan kesalahan dengan try-except Untuk mencegah satu kegagalan (berita dengan struktur yang berubah, permintaan yang gagal, tag yang hilang) menyebabkan seluruh proses terhenti, menangkap pengecualian spesifik dan memutuskan kapan harus mengabaikan kesalahan dan kapan harus berhenti adalah bagian dari rutinitas harian untuk jenis proyek ini.

Pengambilan data dinamis dengan Selenium: JavaScript, iframe, dan tindakan pengguna

Ketika web mulai bergantung pada JavaScript untuk segalanya, pengikisan statis menjadi tidak efektif. Jika konten dihasilkan secara dinamis, konten tersebut tersembunyi di balik iframe atau hanya muncul setelah berinteraksi dengan tombol, formulir, atau elemen dinamis.Anda memerlukan browser sungguhan atau browser tanpa antarmuka grafis (headless browser) yang menjalankan semua logika tersebut.

Di sinilah Selenium menunjukkan keunggulannya. Selenium awalnya dirancang untuk Mengotomatiskan pengujian fungsional aplikasi webNamun kemampuannya untuk menangani browser—membuka halaman, mengklik, mengisi input, menunggu konten dimuat—menjadikannya alat yang sangat ampuh untuk pengambilan data dinamis (dynamic scraping).

Inti dari Selenium adalah WebDriver, sebuah komponen yang mengontrol browser yang dipilih (Chrome, Firefox, dan lainnya). Untuk menggunakannya, Anda memerlukan... driver khusus browser (geckodriver untuk Firefox, chromedriver untuk Chrome, dll.), yang harus berada di jalur yang dapat diakses dari sistem Anda, biasanya termasuk dalam variabel lingkungan PATH.

Instalasi dasar Python dilakukan dengan cara seperti ini: pip menginstal seleniumDari situ, dalam skrip Anda, Anda membuat instance WebDriver, misalnya dengan webdriver.Firefox() atau webdriver.Chrome()Dan sekarang Anda dapat mulai menjelajahi, membuka URL, atau berinteraksi dengan halaman seolah-olah Anda adalah pengguna sungguhan.

Adapun jenis peramban, Anda dapat menggunakan peramban lengkap dengan antarmuka grafis atau peramban dalam mode siaga. tanpa kepalaSecara teori ada alternatif seperti PhantomJS, tetapi dalam praktiknya banyak orang melaporkan ketidakkompatibilitas dan perilaku aneh, jadi biasanya lebih baik menggunakan... Gunakan Chrome atau Firefox dalam mode headless atau real-time. untuk mengurangi kejutan.

Setelah halaman dimuat, Selenium memungkinkan Anda untuk menemukan elemen menggunakan berbagai macam selektor: berdasarkan id, nama, kelas, pemilih CSS, atau XPathAnda dapat memanggil metode seperti temukan_elemen atau temukan_elemen dan dari situ, luncurkan aksi seperti klik, kirim_kunci, atau ambil teks yang terlihat dari setiap node.

Gabungkan Selenium dan BeautifulSoup untuk mendapatkan hasil maksimal.

Kombinasi paling ampuh untuk situs web yang kompleks biasanya adalah sebagai berikut: Selenium menangani pemuatan halaman, menjalankan JavaScript, dan menyiapkan DOM akhir; BeautifulSoup kemudian masuk untuk mengurai HTML yang telah dirender dan mengekstrak data. dengan segala kemudahan fungsi pencariannya.

Pola umumnya sederhana. Pertama, Anda menginisialisasi WebDriver, kemudian memuat URL dengan driver.get() Dan, jika perlu, Anda menunggu elemen-elemen kunci tertentu muncul menggunakan penundaan eksplisit. Setelah yakin konten telah dimuat, Anda akan mendapatkan HTML akhir dengan driver.page_source.

Anda meneruskan HTML tersebut ke BeautifulSoup, sama seperti yang Anda lakukan pada pengambilan data statis, untuk diulang. tabel, daftar, artikel, baris, atau blok apa pun dengan struktur berulangIni memungkinkan Anda memanfaatkan kekuatan selektor Selenium untuk mencapai bagian halaman yang tepat, dan kemudian fleksibilitas BeautifulSoup untuk mengekstrak data dengan bersih.

Pada halaman yang menggunakan iframe, seperti komentar Disqus, Anda seringkali harus ubah konteks ke iframe tertentu Sebelum mengekstrak konten. Dengan Selenium, Anda dapat menemukan iframe - misalnya yang menggantung dari kontainer dengan id disqus_thread -, menggunakan switch_to.frame dan, setelah berada di dalam, tunggu hingga elemen-elemen seperti penghitung komentar atau blok teks dimuat.

Dalam kasus lain, seperti generator konten, kombinasinya bahkan lebih jelas. Bayangkan generator nama Star Wars yang memungkinkan Anda memilih Jika Anda menginginkan nama laki-laki, perempuan, atau campuran, dan berapa banyak nama yang Anda inginkan sekaligusSebagai contoh, 100 nama per klik. Selenium akan menangani pemilihan opsi yang sesuai (misalnya, tombol radio dengan nama="choice" dan nilai="100"), mengklik tombol "Generate", dan menunggu hingga tabel nama selesai dibuat.

Setelah daftar nama muncul, Anda mengambil driver.page_source, Anda meneruskannya ke BeautifulSoupAnda mencari tabel yang sesuai (misalnya, tabel keempat di halaman tersebut) dan mengekstrak semua sel dari tabel tersebut. Anda membersihkan teks, mengganti karakter yang tidak lazim, menghapus duplikat, dan menyimpan setiap nama baru dalam sebuah daftar.

Dalam sebuah perulangan yang mengulangi proses ini hingga, misalnya, mencapai 100.000 nama, Selenium mengotomatiskan interaksi antarmuka pengguna, dan BeautifulSoup menangani ekstraksi dan pembersihan data. Tidak jarang proses seperti ini membutuhkan waktu yang cukup lama. lebih dari satu jamOleh karena itu, disarankan untuk mengontrol waktu, menangani pengecualian, dan, jika perlu, menyimpan status sementara untuk menghindari kehilangan pekerjaan.

Studi kasus praktis dengan BeautifulSoup, Selenium, dan API.

Dengan semua komponen yang tersedia, Anda dapat membangun berbagai macam proyek, mulai dari... Mulai dari alat pengikis sederhana untuk penggunaan pribadi hingga pipa ekstraksi skala besar yang kompleks.Yang terpenting adalah memilih alat yang tepat untuk setiap lapisan.

Di bidang penerbitan, misalnya, Anda dapat menyiapkan sistem yang menjelajahi situs web surat kabar, memperoleh Untuk artikel di bagian tertentu, unduh teks utama, penulis, tanggal, tag, dan gambar utama. dan menyimpannya dalam basis data untuk analisis konten atau proyek NLP di kemudian hari.

Dalam e-commerce, contoh klasiknya adalah melakukan scraping situs web maskapai penerbangan atau situs perbandingan penerbangan untuk Dapatkan harga, jadwal, bandara asal dan tujuanPembatasan bagasi dan detail penting lainnya. Di sinilah keduanya berada. Requests dan BeautifulSoup jika HTML-nya statis., seperti Selenium jika hasilnya muncul setelah berinteraksi dengan formulir dan pemilih dinamis.

Proyek umum lainnya melibatkan penggabungan pengambilan data (scraping) dengan penggunaan API resmi jika tersedia.Sebagai contoh, Anda dapat memperoleh informasi tentang artis, album, dan lagu menggunakan API Spotify dan, pada saat yang sama, mengambil ulasan atau komentar dari blog dan situs web musik untuk memperkaya data Anda dengan opini pengguna.

Jika Anda perlu melampaui skrip sekali pakai dan menginginkan skalabilitas untuk volume data yang besarHadir Scrapy, sebuah kerangka kerja scraping khusus yang menyederhanakan hidup Anda dengan antrian permintaan, manajemen spider, middleware, dan pipeline. Selenium masih dapat berguna dalam kasus-kasus tertentu; cukup integrasikan ke dalam spider yang membutuhkan eksekusi JavaScript.

Dalam semua kasus ini, etika dan legalitas tetap berlaku: kuncinya adalah menghormati robots.txt, membatasi frekuensi permintaan, Jangan memasuki area pribadi atau melewati langkah-langkah keamanan. dan gunakan data tersebut secara bertanggung jawab, terutama jika Anda akan memanfaatkannya secara komersial.

Manajemen kesalahan, lingkungan kerja, dan praktik terbaik

Scraper yang handal bukan hanya tentang mengetahui cara menggunakan library, tetapi juga tentang... Atur lingkungan kerja dengan baik, kendalikan kesalahan, dan pastikan kode mudah dibaca dan digunakan kembali.Jika proyek tersebut berkembang meskipun hanya sedikit, Anda akan senang karena telah memulainya dengan langkah yang tepat.

Untuk proyek profesional di Linux atau macOS, biasanya disarankan untuk membuat folder khusus untuk proyek tersebut, lalu memasang (mount) sebuah lingkungan virtual dengan venvAktifkan dan instal hanya dependensi yang diperlukan di dalamnya: requests, beautifulsoup4, selenium, jupyter jika Anda akan menggunakan notebook, dll. Ini akan mempermudah untuk mereproduksi lingkungan, memperbarui paket, atau memindahkan proyek ke mesin lain.

Dalam lingkungan yang lebih ringan atau untuk pembuatan prototipe cepat, banyak orang beralih ke google colabDi mana Anda dapat menginstal pustaka yang diperlukan dengan pip dan bekerja langsung dari browser. Namun, untuk proyek-proyek serius, disarankan untuk bermigrasi ke lingkungan terkontrol di mana Anda dapat membuat versi kode dan mengelola kredensial dengan aman.

Dalam pekerjaan sehari-hari, Anda akan berurusan dengan pengecualian. Ketika permintaan gagal, ketika elemen Selenium tidak muncul tepat waktu, atau ketika BeautifulSoup tidak dapat menemukan node yang Anda harapkan, Python akan melempar pengecualian. pengecualian yang, jika tidak ditangani, akan menghentikan program.Penggunaan blok try-except memungkinkan Anda untuk menangani kegagalan ini, mencatat apa yang terjadi, dan memutuskan apakah akan melewati URL tersebut, mencoba lagi, atau menghentikan eksekusi.

Desain fungsional juga sangat membantu menjaga keteraturan. Memisahkan fungsi yang Unduh halaman tersebut, ada lagi yang menganalisis tautan, dan ada lagi yang mengekstrak isi artikel berita. Dan fitur lain yang menyimpan data memungkinkan Anda untuk menguji setiap bagian secara terpisah, menggunakan kembali kode, dan mengubah implementasi ketika situs memodifikasi strukturnya.

Terakhir, jika Anda akan mengunduh konten multimedia seperti gambar unggulan dari artikel, Anda perlu membungkus logika tersebut dalam fungsi-fungsi khusus yang menanganinya. Menerima URL, melakukan permintaan, menyimpan file dengan nama yang wajar, dan menangani kesalahan koneksi.Dengan cara ini Anda menghindari pencampuran terlalu banyak tanggung jawab dalam blok kode yang sama.

Singkatnya, jika Anda memahami bagaimana halaman web modern dibangun, kapan HTML statis sudah cukup dan kapan Anda membutuhkan browser sungguhan, dan Anda menggabungkannya dengan bijak, Anda dapat mencapai hasil yang diinginkan. Requests, BeautifulSoup, Selenium, API, dan alat-alat seperti Scrapy.Anda dapat mengotomatiskan ekstraksi data dengan cukup elegan. Yang penting adalah melakukannya dengan cermat, menghormati batasan teknis dan hukum, serta menjaga agar kode tetap terorganisir sehingga Anda masih tahu fungsi setiap bagiannya beberapa bulan kemudian.