Untuk membuat pengikisan web dalam Python dengan BeautifulSoup, kamu memerlukan dua pustaka: requests untuk mengunduh halaman web tersebut, dan beautifulsoup4 untuk mengekstrak data dari kode HTML.
Pasanglah dengan perintah pip install requests beautifulsoup4, lalu ikuti panduan di bawah ini untuk melakukan scraping pada sebuah situs secara bertahap.

Prasyarat untuk melakukan scraping pada Python dengan BeautifulSoup
Sebelum memulainya, kamu tidak perlu menjadi ahli. Cukup bisa membaca dan menjalankan skrip Python sudah lebih dari cukup untuk memulai.
Berikut ini yang perlu diinstal untuk memulai:
- Memasang Python serta lingkungan pengembangan.
- Memasang pip, alat yang memungkinkan Anda menambahkan pustaka Python hanya dengan satu perintah.
- Memasang BeautifulSoup :
pip install beautifulsoup4
Perhatikan nama paketnya: di PyPI, itu benar beautifulsoup4 yang harus ditulis. Modul yang akan kamu impor ke dalam kode kamu bernama bs4.
- Memasang Requests untuk mengunduh halaman web:
permintaan pemasangan pip
- Memasang lxml (opsional), parser yang lebih cepat yang digunakan BeautifulSoup untuk menganalisis HTML:
pip install lxml
Bagaimana cara melakukan web scraping dengan Python dan BeautifulSoup?
Berikut ini adalah panduan lengkap untuk memulihkan judul dari sebuah halaman web dan semua tautan yang terkandung di dalamnya.

Langkah 1: Mengambil konten halaman dengan Permintaan
Untuk mengunduh sebuah halaman web, kamu mengirimkan sebuah Permintaan HTTP GET ke sebuah URL. Itulah fungsi dari pustaka tersebut Requests.
Setiap kali ada permintaan, server akan mengirimkan sebuah kode status yang menunjukkan apakah semuanya berjalan lancar. Hal-hal utama yang perlu diketahui:
- 200 sukses.
- 301 / 302 pengalihan.
- 404 Halaman tidak ditemukan.
- 500 kesalahan server internal.
Dengan Requests, kamu memeriksa hasil ini menggunakan atribut .status_code. Berikut ini contoh konkretnya: kode ini mengirimkan permintaan ke sebuah situs, memeriksa kode status, lalu menampilkan cuplikan konten HTML jika semuanya berjalan lancar.
permintaan impor
URL Target #
url = "https://bonjour.com"
# Mengirim permintaan GET
response = requests.get(url)
# Periksa kode status
if response.status_code == 200:
print("Sukses: halaman telah diambil!")
html = response.text # Konten HTML dari halaman
print("Ekstrak konten HTML:")
print(html[:500]) # hanya menampilkan 500 karakter pertama
else
print(f "Kesalahan: kode status {response.status_code}")
Langkah 2: Analisis kode HTML dengan BeautifulSoup
Saat kamu mengambil konten dari sebuah halaman dengan response.text, kamu akan mendapatkan sebuah string karakter sederhana: seluruh kode HTML dari halaman tersebut, tetapi belum dapat dimanfaatkan dalam kondisi saat ini. Untuk mengelolanya dengan mudah, buatlah sebuah objek BeautifulSoup, yang mengubah HTML mentah ini menjadi struktur yang dapat kamu telusuri dan analisis.
Selalu menunjukkan sebuah pengurai, misalnya "html.parser. BeautifulSoup kemudian akan menafsirkan HTML tersebut dengan benar, tanpa menampilkan peringatan apa pun. Kamu juga bisa menggunakan lxml, yang lebih cepat, dan harus dipasang secara terpisah.
from bs4 import BeautifulSoup
permintaan impor
url = "https://bonjour.com"
response = requests.get(url)
html = response.text
# Menentukan pengurai direkomendasikan
sup = BeautifulSoup(html, "html.parser")
Langkah 3: Menemukan dan mengekstrak elemen
HTML tersebut kini telah menjadi objek BeautifulSoup. Kamu dapat mencari dan mengambil data yang menarik minatmu, satu per satu. Tiga metode ini mencakup sebagian besar kebutuhan.
Menggunakan find() dan find_all()
find() mengembalikan unsur pertama ditemukan. find_all() mengembalikan daftar lengkap elemen-elemen yang sesuai.
# Ambil judul <h1>
h1 = sup.find("h1")
print(h1.get_text())
# Ambil semua tautan <a>
liens = soup.find_all("a")
untuk lien dalam liens:
print(lien.get_text(), lien.get("href"))
Elemen target berdasarkan atribut
Kamu dapat mempersempit pencarian berdasarkan atribut HTML, seperti kelas, id atau yang lainnya. Harap dicatat: Dalam Python, kita menulis kelas_ dan tidak kelas, untuk menghindari konflik dengan kata yang telah ditetapkan dalam bahasa tersebut.
# Mengambil elemen div dengan id tertentu
container = soup.find("div",)
# Mengambil semua tautan dengan kelas tertentu
tautan_nav = soup.find_all("a", class_="nav-link")
Menggunakan selektor CSS dengan select()
Untuk pencarian yang lebih akurat, metode select() menerima Pemilih CSS. Kamu dapat menargetkan bagian-bagian tertentu dari sebuah halaman secara tepat, tanpa perlu menelusuri seluruh kode HTML secara manual.
# Semua tautan dalam judul artikel
article_links = sup.select("artikel h2 a")
# Semua <a> yang atribut href-nya dimulai dengan "http".
links_http = sup.select('a[href^="http"]]')
Bagaimana cara mengekstrak data dari tabel HTML menggunakan BeautifulSoup?

Kasus penggunaan yang sebenarnya seringkali lebih rumit daripada sekadar mengambil judul atau tautan. Kamu harus mengelola...’ekstraksi data terstruktur seperti tabel dan daftar, pembagian halaman, serta kesalahan-kesalahan umum dalam proses scraping.
Mengekstrak tabel dan daftar
Situs web sering kali menyajikan data mereka dalam Tabel HTML (<table>, <tr>, <th>, <td>) atau daftar (/ dengan ). Untuk mengubah struktur-struktur ini menjadi data yang dapat diolah, kamu harus menelusurinya baris demi baris atau elemen demi elemen.
Untuk mengekstrak sebuah tabel HTMLPrinsipnya sederhana saja:
- Mengambil header (
<th>) untuk mengidentifikasi judul kolom. - Menelusuri setiap baris (
<tr>) dan mencari sel (<td>) yang berisi data tersebut. - Menyimpan informasi dalam daftar atau kamus.
Untuk Daftar HTML ( Di mana ) :
- Tandai semua tag
dengan find_all. - Mengambil isinya (teks atau tautan) dan menambahkannya ke dalam daftar Python.
Berikut ini contoh dengan sebuah tabel:
html = """
<table>
<tr>
<th>nama keluarga</th>
<th>Usia</th>
<th>Kota</th>
</tr>
<tr>
<td>Alice</td>
<td>25</td>
<td>Paris</td>
</tr>
<tr>
<td>Bob.</td>
<td>30</td>
<td>Lyon</td>
</tr>
</table>
"""
# Membuat objek BeautifulSoup
sup = BeautifulSoup(html, "html.parser")
# Ekstrak header dari larik
headers = [th.get_text(strip = True) for th in soup.find_all("th")]
print("Header:", headers)
# Ekstrak baris-baris data (lewati baris pertama karena ini adalah header)
rows = []
for tr in sup.find_all("tr")[1:]:
cells = [td.get_text(strip = True) for td in tr.find_all("td")]
if cells:
rows.append(cells)
print("Baris :", rows)
Ini, find_all("th") mengambil judul dan find_all("td") mengambil sel-sel dari setiap baris. Kamu mengulangi proses ini pada <tr> untuk membangun kembali tabel baris demi baris.
Berikut ini contoh berdasarkan daftar:
from bs4 import BeautifulSoup
html_list = """
- Apel
- Pisang
- Jeruk
"""
sup = BeautifulSoup(html_list, "html.parser")
# Mengambil item dari daftar
items = [li.get_text(strip = True) for li in soup.find_all("li")]
print("Daftar yang diekstrak:", item) # ["Apel", "Pisang", "Jeruk"]
Masing-masing langsung diubah menjadi elemen daftar Python, sehingga menghasilkan hasil ["Apel", "Pisang", "Jeruk"].
Mengelola penomoran halaman dan tautan
Seringkali, data tidak muat dalam satu halaman saja. Data tersebut disebar melalui tautan-tautan “halaman berikutnya” atau penomoran halaman bernomor (?halaman=1, ?halaman=2, dll.). Dalam kedua kasus tersebut, kamu harus ikal untuk mengambil semua halaman dan menggabungkan datanya.
Contoh dengan parameter halaman:
waktu impor
permintaan impor
from bs4 import BeautifulSoup
# Contoh URL dengan pagination
BASE_URL = "https://bonjour.com/articles?page={}"
HEADERS = {"User-Agent": "Mozilla/5.0"}
all_articles = []
# Asumsikan ada 5 halaman untuk dijelajahi
untuk halaman dalam rentang (1, 6):
url = BASE_URL.format(page)
r = requests.get(url, tajuk = HEADERS, batas waktu = 20)
if r.status_code == 200:
sup = BeautifulSoup(r.text, "html.parser")
# Ekstrak judul artikel
articles = [h2.get_text(strip=True) for h2 in soup.find_all("h2", class_="title")]
semua_artikel.extend(artikel)
else
print(f "Kesalahan pada halaman {halaman} (kode : {r.status_kode})")
time.sleep(1.0) Kesantunan #
print("Artikel yang diambil:", semua_artikel)
Penjelasan singkat langkah demi langkah:
- Siapkan’URL dengan satu tempat
{}untuk memasukkan nomor halaman.
BASE_URL = "https://bonjour.com/articles?page={}
- Beberapa situs memblokir permintaan yang tidak menyertakan informasi identitas peramban. Tambahkan sebuah User-Agent hindari agar tidak dianggap sebagai bot.
headers = {"User-Agent": "Mozilla/5.0"}
requests.get(url, headers=headers)
- Tautan kembali ke halaman 1 hingga 5.
untuk halaman dalam rentang (1, 6):
- Ambil kode HTML dari halaman tersebut dengan requests.
requests.get(url)
- Membatasi waktu tunggu jika situs tidak merespons (batas waktu 20 detik).
requests.get(url, timeout=20)
- Analisis halaman ini dengan BeautifulSoup.
BeautifulSoup(response.text, "html.parser")
- Mengambil semua judul artikel.
find_all("h2", class_="title")
- Tambahkan artikel yang ditemukan ke dalam daftar keseluruhan.
all_articles.extend(articles)
- Masukkan sebuah istirahat di antara setiap permintaan agar server tidak kelebihan beban dan untuk menghindari pemblokiran.
time.sleep(1.0)
Setelah putaran, semua_artikel berisi semua 5 judul halaman.
Kesalahan dan tantangan umum
Scraping bukan sekadar menekan tombol. Kamu akan sering menemui kendala:
- Kesalahan HTTP : 404 (halaman tidak ditemukan), 403 (dilarang masuk) dan 500 (kesalahan di sisi server).
Contoh pengelolaan:
response = requests.get(url)
if response.status_code == 200:
print("Halaman berhasil diambil")
elif response.status_code == 404:
print("Kesalahan: halaman tidak ditemukan")
else:
print("Kode status yang dikembalikan:", response.status_code)
- Situs yang memblokir pengikisan : ada yang mendeteksi permintaan otomatis dan memblokir akses.
- Halaman dinamis (JavaScript) : BeautifulSoup hanya membaca HTML statis. Jika halaman tersebut memuat isinya menggunakan JavaScript, kamu tidak akan melihat apa pun. Dalam hal ini, kamu harus menggunakan alat seperti Selenium Di mana Playwright.
Untuk melakukan scraping secara efektif tanpa diblokir atau merusak situs, berikut ini adalah praktik terbaiknya:
- Patuhi file robots.txt dari situs yang ingin kamu analisis.
- Terapkan tenggat waktu antara permintaan dengan
time.sleep()agar server tidak kelebihan beban. - Gunakan proxy dan putar-putar.
- Gantilah secara teratur User-Agent.
Bagaimana cara menghapus web dengan Selenium dan BeautifulSoup?

Selenium mengontrol browser yang sebenarnya, menjalankan kode JavaScript dan menampilkan halaman tersebut seolah-olah sedang dijelajahi oleh manusia. BeautifulSoup Kemudian, analisis HTML setelah halaman ditampilkan sepenuhnya, lalu ekstrak semua data yang kamu inginkan.
Langkah 1: Instal Selenium dan BeautifulSoup
Di sini, alih-alih requests, kamu menggunakan Selenium untuk mengambil konten halaman tersebut. Instal kedua pustaka tersebut dengan perintah berikut:
pip install selenium beautifulsoup4
Selanjutnya, kamu harus mengunduh sebuah WebDriver disesuaikan dengan versi browser-mu. Untuk Google Chrome, ini adalah ChromeDriver. Kamu punya dua pilihan: menyimpannya di folder yang sama dengan skrip Python-mu, atau’Tambahkan ke variabel lingkungan PATH dari sistemmu.
Langkah 2: Mengkonfigurasi Selenium
Mulailah dengan mengimpor webdriver menggunakan Selenium untuk mengendalikan peramban.
from selenium import webdriver
from selenium.webdriver.common.by import By
Selanjutnya, buka peramban. Peramban itulah yang akan membuka halaman tersebut dan menjalankan JavaScript, di sini Chrome.
driver = webdriver.Chrome()
Memberitahu peramban mana URL mengunjungi.
driver.get("https://www.exemple.com")
Jika halaman membutuhkan waktu lama untuk menampilkan beberapa elemen, kamu dapat meminta Selenium untuk menunggu hingga 10 detik.
driver.secara_implisit_menunggu(10)
Langkah 3: Mengambil konten halaman
Setelah halaman dimuat, ambil DOM penuh : kode sumber HTML yang dihasilkan setelah JavaScript dijalankan.
html_content = driver.page_source
Langkah 4: Analisis HTML dengan BeautifulSoup
Sekarang, kirimkan kode sumber ini ke BeautifulSoup untuk memanfaatkannya:
from bs4 import BeautifulSoup
# Membuat objek BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Contoh: mengambil semua judul dari halaman
judul = soup.find_all('h2')
for judul in judul:
print(judul.get_text())
BeautifulSoup menyediakan metode-metode yang sangat berguna seperti find(), find_all() dan selektor CSS untuk menargetkan dan mengekstrak elemen-elemen tertentu dalam HTML.
Langkah 5: Menutup browser
Sangat penting: selalu tutup browser-mu setelah menjalankan program untuk membebaskan sumber daya.
driver.quit()
Dengan demikian, kamu menggabungkan kekuatan dari Selenium untuk mensimulasikan navigasi manusia (klik, pengguliran) dengan keefektifan BeautifulSoup dalam menganalisis HTML. Ini adalah metode yang ideal untuk melakukan scraping pada situs yang memuat datanya melalui JavaScript.
FAQ
Apa alat terbaik untuk web scraping di Python?
Tidak ada’alat pengikis yang bersifat universal, melainkan solusi yang disesuaikan dengan proyekmu. Berikut ini tiga yang paling sering digunakan:
- BeautifulSoup : sederhana dan efektif untuk menganalisis HTML dan mengekstrak konten dengan cepat. Cocok sekali jika kamu baru memulai atau memiliki proyek-proyek kecil.
- Scrapy : sebuah kerangka kerja yang lengkap, dirancang untuk mengelola volume data yang besar dengan fitur-fitur canggih.
- Playwright : sangat cocok untuk situs web kompleks yang dihasilkan oleh JavaScript. Alat ini mensimulasikan peramban sungguhan dan berinteraksi dengan halaman layaknya manusia.
Bagaimana cara menggunakan BeautifulSoup untuk mengekstrak konten dari tag div?
Dengan BeautifulSoup, kamu menargetkan sebuah tag tertentu dengan menggunakan sebuah Pemilih CSS. Untuk mengekstrak isi sebuah tag <div>, ikuti langkah-langkah berikut ini.
1. Mengunduh halaman web dengan requests, lalu menganalisis HTML dengan BeautifulSoup.
from bs4 import BeautifulSoup
import requests
url = "URL_DE_TON_SITE" # Remplace par l'URL réelle
reponse = requests.get(url)
html_content = reponse.text
soup = BeautifulSoup(html_content, "html.parser")
2. Menggunakan metode tersebut select() dengan selektor CSS-mu untuk menargetkan tag tersebut <div>.
Untuk mengambil elemen pertama, gunakan sup.select_one. Untuk mengambil semua elemen, gunakan sup.pilih. Berikut ini adalah contoh kode HTML:
<div>
<h2>Titre de l'article</h2>
<p>Voici le contenu du paragraphe.</p>
</div>
Dan berikut ini contohnya dengan selektor CSS div.article :
# Récupérer le premier div avec la classe "article"
div_article = soup.select_one("div.article")
# Afficher son contenu texte
if div_article:
print(div_article.get_text(strip=True))
3. Keluarkan benda-benda yang ada di dalam <div>.
# Récupérer le titre à l'intérieur du div
titre = soup.select_one("div.article h2").get_text()
# Récupérer le paragraphe à l'intérieur du div
paragraphe = soup.select_one("div.article p").get_text()
print("Titre :", titre)
print("Paragraphe :", paragraphe)
Bagaimana Requests dan BeautifulSoup dapat digunakan bersama?
Kedua perpustakaan tersebut adalah tambahan : yang satu mengunduh halaman tersebut, yang lain menganalisisnya.
1. requests mengirimkan permintaan HTTP dan mengunduh kode HTML mentah dari halaman tersebut.
import requests
url = "https://sitecible.com"
response = requests.get(url) # requête HTTP
print(response.text) # affiche le HTML brut
Pada tahap ini, kamu hanya memiliki teks yang sangat panjang dan penuh dengan tag (<html>, <div>, <p>dll.).
2. BeautifulSoup menganalisis HTML mentah ini dan mengubahnya menjadi sebuah struktur yang terorganisir. Kemudian, kamu bisa menjelajahi halaman tersebut, menemukan tag-tagnya, dan mengambil datanya.
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, "html.parser") # analyse le HTML
titre = soup.find("h1").get_text() # extrait le contenu d'un <h1>
print(titre)
Mengapa kode scraping web saya tidak berfungsi di beberapa situs?
Terkadang skripmu tidak berhasil mengambil apa pun. Beberapa situs tidak menyajikan seluruh kontennya secara langsung dalam format HTML: mereka menggunakan JavaScript untuk memuat data secara dinamis. Namun, BeautifulSoup tidak dapat menganalisis data yang dihasilkan oleh JavaScript. Dalam hal ini, kamu perlu memanfaatkan alat-alat seperti Playwright Di mana Selenium.
Peran apa yang dimainkan BeautifulSoup dalam web scraping?
BeautifulSoup berperan sebagai’Pengurai HTML. Ia mengubah kode suatu halaman menjadi objek terstruktur yang dapat kamu telusuri dengan mudah. Singkatnya, ini adalah pengonversi antara HTML mentah dan kode Python-mu.
Web scraping: BeautifulSoup atau Scrapy?
BeautifulSoup dan Scrapy sungguh berbeda, meskipun keduanya digunakan untuk pengikisan web.
| BeautifulSoup | Scrapy |
|---|---|
| Pustaka sederhana yang hanya digunakan untuk mengurai HTML dan mengekstrak data. | Sebuah kerangka kerja lengkap yang mengelola seluruh proses scraping: permintaan, pelacakan tautan, paginasi, ekspor data, dan penanganan kesalahan. |
BeautifulSoup adalah pilihan yang tepat untuk pemula: ini membuat’Ekstraksi data HTML dalam Python sederhana dan cepat.
Jika kamu lebih suka meminimalkan bagian kode sebanyak mungkin, alat ini Data Cerah menyediakan kumpulan data yang siap pakai untuk meminimalkan bagian pemrograman.





