Cara Membuat Web Scraping Python Menggunakan Library BeautifulSoup dapat dipelajari tanpa harus menguasai pemrograman tingkat lanjut. Anda cukup memahami dasar Python, mengenali elemen HTML, dan mengetahui cara memilih bagian halaman yang ingin diambil.
Web scraping menjadi salah satu teknik yang banyak digunakan untuk mengumpulkan informasi dari halaman web secara otomatis. Dengan Python, proses yang biasanya dilakukan dengan menyalin data satu per satu dapat dijalankan melalui script yang lebih cepat dan mudah diulang.
Dalam tutorial ini, kita akan membuat program sederhana untuk mengambil judul halaman, teks, dan tautan dari website, kemudian menyimpan hasilnya ke file CSV. Contoh kode menggunakan halaman HTML statis agar mudah dipraktikkan dan hasilnya lebih konsisten.
Pengertian Web Scraping Python dan Fungsi Library BeautifulSoup
Web scraping adalah teknik mengambil informasi dari halaman web menggunakan program. Data yang dikumpulkan dapat berupa judul artikel, nama produk, harga yang ditampilkan secara publik, tanggal publikasi, deskripsi, hingga tautan menuju halaman tertentu.
Jika dilakukan secara manual, pengumpulan data dari puluhan atau ratusan halaman dapat memakan waktu cukup lama. Dengan Python, proses tersebut dapat diotomatisasi sehingga hasilnya lebih mudah diolah, disimpan, dan dianalisis.
Python sering digunakan untuk kebutuhan ini karena sintaksnya relatif mudah dipahami dan memiliki banyak library pendukung. Salah satu library yang populer untuk membaca struktur HTML adalah BeautifulSoup.
Apa itu BeautifulSoup?
BeautifulSoup merupakan library Python yang membantu mengurai atau mem-parsing dokumen HTML dan XML. Library ini mengubah struktur dokumen menjadi objek yang bisa ditelusuri menggunakan nama tag, atribut, maupun pola elemen tertentu.
Misalnya, sebuah halaman mempunyai judul di dalam tag <h1>, paragraf di dalam <p>, dan tautan di dalam <a>. BeautifulSoup memungkinkan program menemukan elemen-elemen tersebut tanpa harus membaca seluruh kode HTML secara manual.
BeautifulSoup bukan alat yang mengambil halaman web dari internet dengan sendirinya. Untuk mengunduh HTML, Anda biasanya menggunakan library seperti requests, kemudian menyerahkan hasilnya kepada BeautifulSoup untuk diproses.
Perbedaan web scraping, Requests, dan BeautifulSoup
Ketiganya mempunyai fungsi berbeda, tetapi dapat digunakan bersama dalam satu program.
| Komponen | Fungsi | Contoh penggunaan |
|---|---|---|
| Python | Bahasa pemrograman utama | Mengatur alur scraping dan menyimpan data |
| Requests | Mengirim permintaan HTTP ke server | Mengunduh HTML halaman |
| BeautifulSoup | Membaca dan mencari elemen HTML | Mengambil judul dan tautan |
| CSV | Format penyimpanan data | Membuka hasil scraping di Excel |
Sebagai gambaran, requests bertugas mengambil bahan mentah berupa HTML, sedangkan BeautifulSoup membantu menemukan informasi yang diperlukan. Python kemudian mengatur hasilnya sebelum ditulis ke file CSV.
Kapan BeautifulSoup sebaiknya digunakan?
BeautifulSoup cocok untuk website yang konten utamanya tersedia dalam HTML yang diterima oleh program. Library ini juga berguna ketika Anda ingin mengambil data dari elemen yang mempunyai struktur cukup konsisten.
Contohnya adalah mengumpulkan judul artikel dari halaman arsip blog, mengambil daftar tautan dari direktori publik, atau mengekstrak informasi dari halaman dokumentasi.
Namun, tidak semua website dapat diambil datanya dengan cara yang sama. Situs yang menampilkan konten melalui JavaScript, membutuhkan login, atau menggunakan perlindungan anti-bot mungkin memerlukan pendekatan berbeda.
Catatan penting: web scraping bukan berarti bebas mengambil semua informasi. Periksa ketentuan penggunaan website, robots.txt, kebijakan privasi, dan izin akses yang berlaku. Hindari mengambil data pribadi, melewati autentikasi, atau membebani server dengan permintaan berlebihan.
Persiapan Tools dan Instalasi BeautifulSoup untuk Memulai Web Scraping
Sebelum menulis script, siapkan lingkungan Python agar proses instalasi library dan pengujian kode berjalan dengan baik. Persiapan ini membantu mengurangi masalah seperti modul tidak ditemukan, versi Python berbeda, atau perintah dijalankan pada lingkungan yang keliru.
Anda dapat mengikuti tutorial ini menggunakan Windows, Linux, maupun macOS. Perbedaan utamanya terletak pada cara membuka terminal dan menjalankan perintah Python.
1. Instal Python
Unduh Python melalui situs resminya di python.org. Pilih versi stabil yang sesuai dengan sistem operasi Anda.
Untuk pengguna Windows, aktifkan opsi Add Python to PATH ketika opsi tersebut tersedia pada installer. Pengaturan ini memungkinkan perintah python atau py dipanggil langsung melalui Command Prompt maupun terminal.
Setelah instalasi selesai, buka terminal dan periksa versi Python dengan perintah berikut.
python --version
Jika perintah tersebut tidak dikenali di Windows, coba:
py --version
Pada Linux atau macOS, Anda mungkin perlu menggunakan:
python3 --version
Jika versi Python muncul, berarti interpreter dapat dipanggil melalui perintah tersebut. Apabila belum berhasil, periksa kembali instalasi dan konfigurasi PATH sebelum melanjutkan.
2. Buat folder proyek
Buat folder khusus agar script, file HTML pengujian, dan hasil CSV tidak bercampur dengan proyek lain. Sebagai contoh, gunakan nama folder web-scraping-python.
Buka terminal, kemudian masuk ke folder tersebut. Anda juga dapat membuka folder melalui editor kode seperti Visual Studio Code dan menggunakan terminal terintegrasi yang tersedia.
Struktur proyek sederhana yang akan digunakan adalah:
web-scraping-python/
├── scraping.py
├── contoh.html
└── hasil_scraping.csv
File scraping.py berisi kode Python, contoh.html digunakan untuk pengujian awal, sedangkan hasil_scraping.csv akan dibuat oleh program setelah proses scraping berhasil.
3. Buat virtual environment
Virtual environment adalah lingkungan Python terpisah untuk menyimpan library suatu proyek. Penggunaannya membantu mencegah benturan versi ketika Anda mengerjakan beberapa proyek Python sekaligus.
Jalankan perintah berikut dari folder proyek.
python -m venv .venv
Jika perintah python tidak tersedia, sesuaikan menjadi py -m venv .venv pada Windows atau python3 -m venv .venv pada Linux dan macOS.
Aktifkan lingkungan tersebut dengan perintah yang sesuai.
Windows Command Prompt:
.venv\Scripts\activate.bat
Windows PowerShell:
.venv\Scripts\Activate.ps1
Linux atau macOS:
source .venv/bin/activate
Setelah aktif, biasanya nama .venv muncul di awal baris terminal. Jika PowerShell menolak eksekusi skrip karena kebijakan keamanan, Anda dapat menggunakan Command Prompt atau mengikuti dokumentasi resmi PowerShell untuk pengaturan yang sesuai, tanpa mengubah kebijakan sistem secara sembarangan.
4. Instal Requests dan BeautifulSoup
BeautifulSoup versi 4 dipasang melalui paket bernama beautifulsoup4. Untuk mengambil halaman web, instal juga requests.
Jalankan perintah berikut setelah virtual environment aktif.
python -m pip install requests beautifulsoup4
Menggunakan python -m pip membantu memastikan paket dipasang pada interpreter Python yang dipanggil oleh perintah tersebut. Jika Anda menjalankan Python melalui py atau python3, sesuaikan nama perintahnya.
Periksa instalasi dengan menjalankan:
python -m pip show requests beautifulsoup4
Jika informasi kedua paket muncul, instalasi berhasil. Anda sekarang dapat mengimpor library tersebut ke dalam script Python.
5. Uji apakah library dapat digunakan
Buat file bernama scraping.py, lalu masukkan kode berikut.
import requestsfrom bs4 import BeautifulSoupprint("Requests dan BeautifulSoup siap digunakan.")
Jalankan script menggunakan terminal:
python scraping.py
Jika pesan berhasil muncul tanpa traceback atau pesan kesalahan, lingkungan proyek sudah siap. Apabila muncul ModuleNotFoundError, kemungkinan paket dipasang pada interpreter berbeda atau virtual environment belum aktif.
Cara Mengambil Data HTML dari Website Menggunakan Python dan BeautifulSoup
Setelah semua tools siap, langkah berikutnya adalah mengambil HTML dari website. Pada tahap ini, kita menggunakan Requests untuk mengirim permintaan HTTP, kemudian memeriksa respons server sebelum memproses dokumen dengan BeautifulSoup.
Untuk pemula, sebaiknya mulai dari website yang memang menyediakan halaman publik untuk latihan. Dengan begitu, Anda bisa memahami alur kerja scraping tanpa langsung menghadapi masalah autentikasi atau perlindungan akses.
1. Mengirim permintaan HTTP menggunakan Requests
Buka file scraping.py, kemudian ubah isinya menjadi kode berikut.
import requestsurl = "https://example.com"response = requests.get( url, timeout=15)print("Status HTTP:", response.status_code)print(response.text[:500])
Kode tersebut mengirim permintaan GET ke alamat website yang ditentukan. Parameter timeout=15 membatasi waktu tunggu agar program tidak menunggu tanpa batas ketika server lambat merespons.
Jika respons berhasil diterima, response.status_code menunjukkan kode status HTTP, sedangkan response.text berisi isi respons dalam bentuk teks. Potongan [:500] membatasi tampilan menjadi 500 karakter pertama agar terminal tidak dipenuhi seluruh dokumen.
Kode status 200 biasanya menandakan permintaan berhasil. Namun, status tersebut belum menjamin data yang Anda cari tersedia karena halaman bisa saja berisi pesan kesalahan, halaman kosong, atau konten yang berbeda.
2. Memeriksa respons sebelum memproses HTML
Dalam script yang digunakan untuk pekerjaan sebenarnya, jangan langsung memproses respons tanpa memeriksa statusnya. Server dapat mengembalikan status seperti 403 Forbidden, 404 Not Found, atau 429 Too Many Requests.
Tambahkan penanganan kesalahan seperti berikut.
import requestsurl = "https://example.com"try: response = requests.get( url, timeout=15 ) response.raise_for_status() html = response.text print("HTML berhasil diambil.") print(html[:500])except requests.exceptions.Timeout: print("Permintaan terlalu lama.")except requests.exceptions.HTTPError as error: print("Kesalahan HTTP:", error)except requests.exceptions.RequestException as error: print("Permintaan gagal:", error)
Metode raise_for_status() akan memunculkan kesalahan untuk respons HTTP yang menunjukkan kegagalan, seperti status 4xx atau 5xx. Blok try-except membuat program menampilkan informasi yang lebih mudah dipahami ketika terjadi masalah jaringan atau respons server.
Jika muncul status 429, kurangi frekuensi permintaan dan tunggu sebelum mencoba kembali. Jangan mengirim permintaan berulang dengan cepat untuk memaksa server memberikan akses.
3. Mengubah HTML menjadi objek BeautifulSoup
HTML yang diterima dari server masih berupa teks. Agar program dapat menemukan tag dan atribut dengan lebih mudah, kita perlu mem-parsing dokumen tersebut menggunakan BeautifulSoup.
Tambahkan kode berikut setelah permintaan berhasil.
from bs4 import BeautifulSoupsoup = BeautifulSoup( response.text, "html.parser")print(soup.title)print(soup.title.get_text(strip=True))
Parameter "html.parser" menentukan parser bawaan Python yang digunakan untuk membaca struktur HTML. Untuk banyak halaman biasa, parser ini sudah cukup sehingga Anda tidak perlu memasang parser tambahan.
Baris soup.title mengambil elemen judul HTML jika tersedia. Sementara itu, get_text(strip=True) menghasilkan teks judul tanpa tag HTML dan menghapus spasi di bagian awal maupun akhir.
Sebagai contoh, jika HTML berisi <title>Contoh Website</title>, hasil teks yang diperoleh adalah Contoh Website.
4. Mencoba scraping dengan HTML lokal
Sebelum mengambil data dari website sebenarnya, Anda dapat menguji BeautifulSoup menggunakan file HTML lokal. Cara ini berguna untuk memisahkan masalah pada kode parsing dari masalah jaringan atau pembatasan server.
Buat file contoh.html di folder proyek dengan isi berikut.
<!DOCTYPE html>
<html lang="id">
<head>
<title>Belajar Web Scraping</title>
</head>
<body>
<h1>Tutorial Python</h1>
<p>Belajar mengambil data dari HTML.</p>
<a href="https://example.com">Kunjungi Website</a>
</body>
</html>
Kemudian buat script pengujian berikut.
from pathlib import Pathfrom bs4 import BeautifulSouphtml = Path("contoh.html").read_text( encoding="utf-8")soup = BeautifulSoup(html, "html.parser")print(soup.title.get_text(strip=True))print(soup.h1.get_text(strip=True))
Jalankan script dari folder proyek. Hasil yang diharapkan adalah dua baris teks, yaitu Belajar Web Scraping dan Tutorial Python.
Pengujian lokal sangat membantu ketika Anda ingin mempelajari cara kerja find(), find_all(), dan select() tanpa bergantung pada kondisi website di internet.
5. Mengapa data website terkadang tidak ditemukan?
Ada beberapa penyebab ketika script berhasil mengambil HTML, tetapi elemen yang dicari tidak muncul.
- Konten dimuat menggunakan JavaScript. Data mungkin baru tersedia setelah browser menjalankan JavaScript, sedangkan Requests hanya mengambil respons HTTP.
- Struktur HTML berubah. Nama tag, atribut, atau susunan elemen bisa berbeda dari yang diperkirakan script.
- Server memberikan halaman alternatif. Respons dapat berisi halaman verifikasi, pembatasan akses, atau pesan kesalahan.
- Elemen memang tidak tersedia. Halaman yang berbeda bisa mempunyai struktur dan jumlah data yang tidak sama.
Untuk memeriksanya, buka response.text atau simpan HTML sementara ke file, kemudian cari teks yang seharusnya muncul. Jika teks tidak terdapat dalam respons, masalahnya mungkin bukan pada BeautifulSoup, melainkan pada cara website menyajikan konten.
Apabila konten hanya muncul setelah JavaScript dijalankan, pertimbangkan API resmi yang tersedia atau mekanisme akses yang diizinkan. Browser automation dapat menjadi pilihan untuk kasus tertentu, tetapi tidak selalu diperlukan.
Langkah Mengekstrak Judul, Teks, dan Link Website dengan BeautifulSoup
Ketika HTML sudah berhasil dibaca, tahap selanjutnya adalah mengambil elemen yang dibutuhkan. BeautifulSoup menyediakan beberapa metode pencarian, antara lain find(), find_all(), dan select().
Pemilihan metode yang tepat membuat script lebih mudah dipelihara. Anda tidak perlu mengekstrak seluruh HTML jika hanya membutuhkan beberapa kolom data.
1. Mengambil judul halaman
Judul halaman umumnya disimpan dalam tag <title> di bagian <head>. Namun, judul utama yang terlihat di isi halaman biasanya berada di tag <h1>.
Contoh kode berikut mengambil keduanya.
from bs4 import BeautifulSouphtml = """<html><head> <title>Belajar Python</title></head><body> <h1>Panduan Web Scraping</h1></body></html>"""soup = BeautifulSoup(html, "html.parser")title_tag = soup.find("title")heading_tag = soup.find("h1")title = ( title_tag.get_text(strip=True) if title_tag else "")heading = ( heading_tag.get_text(strip=True) if heading_tag else "")print("Title:", title)print("H1:", heading)
Pemeriksaan if title_tag else "" memastikan program tidak memanggil get_text() pada elemen yang tidak ditemukan. Pendekatan ini mengurangi risiko kesalahan AttributeError saat struktur halaman tidak sesuai perkiraan.
Perlu diingat, tag <title> dan <h1> mempunyai fungsi berbeda. Jangan menganggap keduanya selalu berisi teks yang sama.
2. Mengambil seluruh teks paragraf
Untuk mengambil teks dari semua paragraf, gunakan find_all("p"). Metode ini mengembalikan kumpulan elemen yang cocok sehingga Anda dapat memprosesnya menggunakan perulangan.
paragraphs = soup.find_all("p")for paragraph in paragraphs: text = paragraph.get_text( " ", strip=True ) if text: print(text)
Argumen " " pada get_text() digunakan sebagai pemisah teks dari elemen turunannya. Ini membantu menghindari kata-kata yang menempel ketika isi paragraf terdiri dari beberapa tag HTML.
Jika Anda hanya membutuhkan paragraf pertama, gunakan find("p"). Jika ingin mengambil semua paragraf, find_all("p") lebih sesuai.
Perhatikan bahwa mengambil semua tag <p> dapat menghasilkan teks dari bagian yang tidak relevan, misalnya footer, catatan hak cipta, atau kotak promosi. Untuk hasil yang lebih bersih, batasi pencarian ke bagian konten yang tepat.
3. Mengambil link dan atribut href
Tautan HTML biasanya ditulis menggunakan tag <a>. Teks yang terlihat oleh pengguna berada di dalam tag, sedangkan alamat tujuan umumnya disimpan pada atribut href.
Gunakan contoh berikut untuk mengambil semua tautan dari dokumen.
links = soup.find_all("a")for link in links: text = link.get_text( " ", strip=True ) href = link.get("href", "") print("Teks:", text) print("URL:", href)
Metode get("href", "") lebih aman daripada mengakses link["href"] secara langsung karena tidak menghasilkan KeyError ketika atribut tersebut tidak tersedia. Meski begitu, tautan kosong tetap perlu diperiksa sebelum digunakan.
Alamat yang ditemukan juga tidak selalu berupa URL lengkap. Misalnya, href="/artikel/python" merupakan jalur relatif, bukan alamat yang berdiri sendiri.
Untuk mengubah jalur relatif menjadi URL lengkap, gunakan urljoin() dari library standar Python.
from urllib.parse import urljoinbase_url = "https://example.com"relative_url = "/artikel/python"full_url = urljoin(base_url, relative_url)print(full_url)
Hasilnya adalah https://example.com/artikel/python. Fungsi ini juga menangani URL absolut, sehingga Anda tidak perlu menyusun alamat secara manual.
4. Memilih elemen dengan class dan ID
Pada website yang memiliki banyak elemen serupa, memilih berdasarkan nama tag saja sering menghasilkan data terlalu luas. Anda dapat mempersempit pencarian menggunakan atribut class atau id.
Misalnya, HTML berikut menandai artikel menggunakan class artikel.
<article class="artikel">
<h2>Belajar Python</h2>
<p>Panduan pemrograman dasar.</p>
</article>
Elemen tersebut dapat ditemukan dengan kode:
article = soup.find( "article", class_="artikel")if article: print(article.get_text(" ", strip=True))
BeautifulSoup menggunakan parameter class_ karena kata class merupakan kata khusus dalam Python. Alternatif lain adalah menggunakan CSS selector melalui select().
articles = soup.select("article.artikel")for article in articles: print(article.get_text(" ", strip=True))
Selector article.artikel berarti elemen <article> yang memiliki class artikel. Anda juga dapat memakai #konten untuk mencari elemen dengan ID konten, atau .kartu-produk untuk memilih elemen berdasarkan class.
Selector yang tepat bergantung pada struktur HTML website target. Karena itu, periksa kode sumber halaman melalui fitur Inspect di browser sebelum menentukan selector untuk scraping.
5. Memahami selector yang sering digunakan
| Kebutuhan | Metode atau selector | Fungsi |
|---|---|---|
| Judul halaman | find("title") | Mengambil elemen title pertama |
| Semua paragraf | find_all("p") | Mengambil seluruh tag paragraf |
| Elemen dengan ID | select_one("#konten") | Mengambil elemen ber-ID konten |
| Semua kartu artikel | select("article.kartu") | Mengambil elemen article dengan class kartu |
| Atribut tautan | link.get("href") | Mengambil alamat pada atribut href |
Jika elemen yang dibutuhkan tidak ditemukan, periksa apakah class ditulis dengan benar, apakah elemen berada di dalam iframe, atau apakah konten baru muncul setelah JavaScript berjalan. Jangan langsung mengubah selector secara acak tanpa memeriksa HTML yang sebenarnya.
Contoh Script Web Scraping Python untuk Menyimpan Data ke File CSV
Setelah memahami cara mengambil HTML dan mengekstrak elemen, sekarang kita akan menggabungkan semuanya menjadi program yang lebih praktis. Script berikut mengambil judul halaman, teks, dan link dari sekumpulan artikel, kemudian menyimpan hasilnya dalam format CSV.
Agar mudah diuji, kita menggunakan file HTML lokal yang sudah dibuat sebelumnya. Dengan pendekatan ini, Anda bisa memastikan proses parsing dan penyimpanan berjalan benar sebelum menerapkannya pada website publik yang diizinkan untuk diakses.
1. Siapkan HTML yang berisi beberapa artikel
Buka file contoh.html, kemudian ganti isinya dengan kode berikut.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<title>Daftar Artikel Teknologi</title>
</head>
<body>
<h1>Artikel Terbaru</h1>
<article class="artikel">
<h2>Belajar Python untuk Pemula</h2>
<p>Panduan dasar memahami bahasa Python.</p>
<a href="/python-pemula">Baca Artikel</a>
</article>
<article class="artikel">
<h2>Mengenal Web Scraping</h2>
<p>Cara mengumpulkan data web secara otomatis.</p>
<a href="/web-scraping">Baca Artikel</a>
</article>
<article class="artikel">
<h2>Belajar Mengolah Data CSV</h2>
<p>Teknik menyimpan dan membaca data tabular.</p>
<a href="/data-csv">Baca Artikel</a>
</article>
</body>
</html>
Setiap artikel menggunakan class artikel agar program dapat membedakan satu artikel dari artikel lainnya. Di dalam setiap elemen tersebut terdapat judul, deskripsi, dan tautan yang akan diambil sebagai satu kesatuan data.
2. Buat script scraping lengkap
Buka file scraping.py, lalu masukkan kode berikut. Script ini menggunakan csv dari pustaka standar Python sehingga Anda tidak perlu menginstal library tambahan seperti pandas.
import csvfrom pathlib import Pathfrom urllib.parse import urljoinfrom bs4 import BeautifulSoup# Membaca HTML lokalhtml_path = Path("contoh.html")html = html_path.read_text(encoding="utf-8")# Mem-parsing HTMLsoup = BeautifulSoup(html, "html.parser")# URL dasar untuk mengubah link relatifbase_url = "https://example.com"# Menampung data hasil scrapingdata = []# Mengambil setiap elemen artikelarticles = soup.select("article.artikel")for article in articles: title_tag = article.select_one("h2") text_tag = article.select_one("p") link_tag = article.select_one("a") title = ( title_tag.get_text(" ", strip=True) if title_tag else "" ) text = ( text_tag.get_text(" ", strip=True) if text_tag else "" )
Kode tersebut melakukan empat pekerjaan utama: membaca file HTML, mencari elemen artikel, mengekstrak tiga kolom informasi, dan menuliskan data ke CSV.
Penggunaan utf-8-sig membantu Excel mengenali encoding UTF-8 sehingga karakter bahasa Indonesia lebih mudah ditampilkan dengan benar. Sementara itu, newline="" mengikuti rekomendasi penggunaan modul CSV untuk menghindari baris kosong tambahan pada sistem tertentu.
3. Jalankan program dan periksa hasilnya
Pastikan terminal berada di folder proyek dan virtual environment sudah aktif. Kemudian jalankan perintah berikut.
python scraping.py
Jika berhasil, terminal akan menampilkan jumlah artikel yang ditemukan dan lokasi file CSV. File hasil_scraping.csv akan muncul di folder proyek yang sama.
Isi file kurang lebih akan terlihat seperti berikut.
| judul | teks | link |
|---|---|---|
| Belajar Python untuk Pemula | Panduan dasar memahami bahasa Python. | https://example.com/python-pemula |
| Mengenal Web Scraping | Cara mengumpulkan data web secara otomatis. | https://example.com/web-scraping |
| Belajar Mengolah Data CSV | Teknik menyimpan dan membaca data tabular. | https://example.com/data-csv |
Anda bisa membuka file tersebut menggunakan Microsoft Excel, LibreOffice Calc, atau aplikasi pengolah teks. Jika menggunakan editor teks, data akan terlihat sebagai baris CSV dengan pemisah koma.
Perlu diperhatikan bahwa example.com pada script hanya digunakan sebagai URL dasar untuk latihan. Ganti dengan alamat website yang sesuai ketika Anda menggunakan struktur HTML dari situs yang memang mengizinkan pengambilan datanya.
4. Mengambil HTML langsung dari website
Jika ingin mengembangkan contoh sebelumnya untuk mengambil halaman online, Anda dapat mengganti bagian pembacaan file lokal dengan Requests. Berikut contoh alur yang menggabungkan pengambilan HTML dan parsing.
import requestsfrom bs4 import BeautifulSoupurl = "https://example.com"response = requests.get( url, timeout=15)response.raise_for_status()soup = BeautifulSoup( response.text, "html.parser")print(soup.title.get_text(strip=True))
Contoh ini hanya memperlihatkan proses pengambilan halaman dan pembacaan judulnya. Untuk mengekstrak daftar artikel dan menyimpannya ke CSV, gunakan logika ekstraksi dari script sebelumnya dengan menyesuaikan selector HTML website target.
Sebelum menjalankan scraping pada banyak halaman, uji terlebih dahulu satu halaman. Pastikan data yang diambil benar, tidak berulang, dan sesuai dengan struktur yang ditampilkan server.
5. Mengatasi masalah ketika file CSV tidak terbentuk
Jika program berjalan tetapi file CSV tidak ditemukan, periksa beberapa hal berikut.
- File HTML tidak ditemukan: pastikan
contoh.htmlberada di folder kerja yang sama atau gunakan jalur file yang benar. - Jumlah data nol: periksa apakah HTML benar-benar mempunyai elemen
article.artikel. Class dan nama tag harus sesuai dengan dokumen. - Karakter menjadi berantakan: gunakan encoding yang sesuai ketika membaca HTML dan
utf-8-sigsaat menyimpan CSV. - Kolom kosong: periksa apakah judul, teks, dan link berada di dalam elemen artikel yang dipilih.
- File tersimpan di lokasi lain: lihat hasil
output_path.resolve()untuk mengetahui alamat lengkap file yang dibuat.
Perubahan pada website dapat menyebabkan selector tidak lagi cocok. Karena itu, script scraping yang digunakan secara rutin sebaiknya dilengkapi validasi hasil, pencatatan kesalahan, dan pemeriksaan berkala.
Untuk pengambilan data dalam jumlah besar, pertimbangkan pula jeda antarpemintaan, batas jumlah halaman, serta mekanisme penghentian jika server mengembalikan kesalahan. Jangan mengirim permintaan berlebihan hanya untuk mempercepat pengumpulan data.
FAQ Seputar Cara Membuat Web Scraping Python Menggunakan Library BeautifulSoup
1. Apakah BeautifulSoup gratis untuk digunakan?
Ya, BeautifulSoup merupakan library Python yang tersedia secara gratis dan bersifat open source. Anda dapat menggunakannya untuk belajar, membuat proyek pribadi, maupun mengembangkan aplikasi sesuai ketentuan lisensinya.
2. Apakah web scraping Python harus menggunakan BeautifulSoup?
Tidak. BeautifulSoup merupakan salah satu pilihan untuk membaca dan mengekstrak data HTML, tetapi bukan satu-satunya metode.
Anda dapat menggunakan library lain seperti lxml atau parsel sesuai kebutuhan. Jika website menyediakan API resmi yang memberikan data terstruktur, menggunakan API tersebut sering kali lebih praktis daripada mem-parsing HTML.
3. Apakah BeautifulSoup bisa mengambil data dari website yang menggunakan JavaScript?
BeautifulSoup dapat mem-parsing HTML yang diterimanya, tetapi tidak menjalankan JavaScript untuk merender halaman. Jika konten belum terdapat dalam respons HTML, elemen tersebut tidak akan ditemukan melalui parsing biasa.
Periksa apakah website menyediakan API atau data yang memang dapat diakses secara sah. Untuk kasus tertentu, browser automation dapat digunakan jika sesuai dengan ketentuan website.
4. Mengapa BeautifulSoup tidak menemukan tag atau class tertentu?
Penyebabnya bisa berupa selector yang salah, struktur HTML yang berubah, konten yang belum dimuat, atau respons server yang berbeda dari halaman normal.
Periksa response.text, lalu bandingkan dengan struktur HTML melalui fitur Inspect pada browser. Pastikan juga elemen yang dicari benar-benar berada dalam dokumen yang sedang diproses.
5. Bagaimana cara menyimpan hasil web scraping ke Excel?
Cara sederhana adalah menyimpan data ke CSV menggunakan modul csv bawaan Python. File tersebut dapat dibuka di Excel tanpa harus memasang library tambahan.
Jika membutuhkan format .xlsx, beberapa worksheet, pemformatan sel, atau rumus, Anda dapat menggunakan library seperti openpyxl.
6. Apakah web scraping diperbolehkan untuk semua website?
Tidak selalu. Izin pengambilan data bergantung pada ketentuan website, hak atas konten, privasi, batas akses, dan peraturan yang berlaku.
Gunakan data publik yang memang diizinkan untuk diambil, hormati pembatasan akses, dan hindari mengumpulkan informasi pribadi tanpa dasar yang sah. Jika tersedia, utamakan API resmi atau izin langsung dari pemilik website.
7. Apakah pemula bisa membuat web scraping menggunakan Python?
Bisa. Anda dapat memulai dengan memahami variabel, perulangan, kondisi, fungsi, dan cara membaca file sebelum mempelajari parsing HTML.
Latihan menggunakan satu halaman HTML lokal merupakan cara yang baik untuk memahami alur scraping. Setelah berhasil, Anda dapat beralih ke website publik dengan struktur yang lebih kompleks.
8. Apa perbedaan find(), find_all(), dan select() pada BeautifulSoup?
find() digunakan untuk mencari elemen pertama yang cocok, sedangkan find_all() mengembalikan seluruh elemen yang sesuai. Adapun select() menggunakan CSS selector sehingga lebih fleksibel untuk memilih elemen berdasarkan kombinasi tag, class, dan ID.
Pemilihan metode sebaiknya disesuaikan dengan struktur HTML dan kebutuhan data. Untuk mengambil semua kartu artikel yang mempunyai class tertentu, misalnya, select("article.artikel") merupakan pilihan yang mudah dibaca.
Kesimpulan
Cara membuat web scraping Python menggunakan library BeautifulSoup dapat dimulai dengan menyiapkan Python, menginstal Requests dan BeautifulSoup, lalu mengambil serta mem-parsing HTML. Setelah memahami struktur halaman, Anda dapat mengekstrak judul, teks, dan link menggunakan find(), find_all(), atau CSS selector.
Hasil ekstraksi bisa disimpan ke CSV menggunakan modul csv bawaan Python, kemudian dibuka dan diolah melalui aplikasi spreadsheet. Mulailah dengan halaman HTML lokal agar lebih mudah menguji kode sebelum beralih ke website sebenarnya.
Untuk penggunaan rutin, pastikan script mampu menangani kesalahan HTTP, perubahan struktur HTML, dan data kosong. Lakukan scraping secara bertanggung jawab dengan menghormati ketentuan website serta batas akses yang berlaku.