Mengurai HTML dengan BeautifulSoup
Telusuri pohon hasil penguraian dan ekstrak data dengan selector.
Mengurai HTML dengan BeautifulSoup adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Memasang BeautifulSoup
beautifulsoup4 mengurai HTML dan XML. Gunakan pengurai lxml untuk kecepatan atau html.parser jika ingin tanpa dependensi tambahan.
# pip install beautifulsoup4 lxml
from bs4 import BeautifulSoup
html = "<h1>Hello</h1><p class='intro'>World</p>"
soup = BeautifulSoup(html, "lxml")
print(soup.h1.text) # HelloMenemukan Elemen
find(tag) mengembalikan elemen pertama yang cocok. find_all(tag) mengembalikan daftar semua elemen yang cocok.
from bs4 import BeautifulSoup
html = "<ul><li>A</li><li>B</li><li>C</li></ul>"
soup = BeautifulSoup(html, "lxml")
print(soup.find("li").text) # A
print([li.text for li in soup.find_all("li")]) # [A,B,C]Selektor CSS
soup.select("css selector") menggunakan sintaks CSS. soup.select_one() mengembalikan kecocokan pertama.
from bs4 import BeautifulSoup
html = '<div class="card"><a href="/p/1">Link 1</a></div>'
soup = BeautifulSoup(html, "lxml")
print(soup.select("div.card a")[0]["href"]) # /p/1
print(soup.select_one("a")["href"]) # /p/1Mengakses Atribut
Akses atribut tag seperti mengakses kamus: tag["href"], tag.get("class", []).
from bs4 import BeautifulSoup
html = '<a href="https://example.com" class="link external">Click</a>'
soup = BeautifulSoup(html, "lxml")
a = soup.find("a")
print(a["href"]) # https://example.com
print(a.get("class", [])) # ['link', 'external']Menelusuri Pohon Penguraian
Gunakan .parent, .children, .next_sibling, dan .previous_sibling untuk menelusuri pohon.
from bs4 import BeautifulSoup
html = "<div><h2>Title</h2><p>Para</p></div>"
soup = BeautifulSoup(html, "lxml")
h2 = soup.find("h2")
print(h2.parent.name) # div
print(h2.next_sibling.text) # Para (next sibling)Mengekstrak Teks
tag.get_text(separator=" ", strip=True) mengembalikan semua teks di dalam tag, dengan spasi kosong yang telah dibersihkan.
from bs4 import BeautifulSoup
html = "<div> <p>Hello</p> <p> World </p> </div>"
soup = BeautifulSoup(html, "lxml")
print(soup.div.get_text(separator=" ", strip=True))
# Hello WorldScraping dengan requests + BeautifulSoup
Ambil halaman dengan requests dan urai dengan BeautifulSoup — pasangan klasik untuk scraping.
import requests
from bs4 import BeautifulSoup
url = "https://books.toscrape.com"
r = requests.get(url, timeout=10)
soup = BeautifulSoup(r.text, "lxml")
titles = [h3.find("a")["title"] for h3 in soup.select("article.product_pod h3")]
print(titles[:3])Menangani URL Relatif
Gunakan urllib.parse.urljoin(base, href) untuk mengubah tautan relatif menjadi URL absolut.
from urllib.parse import urljoin
base = "https://example.com/products/"
href = "../about"
print(urljoin(base, href)) # https://example.com/aboutMenangani Encoding
BeautifulSoup mendeteksi encoding secara otomatis, tetapi Anda dapat menentukannya atau menggunakan r.encoding dari requests.
import requests
from bs4 import BeautifulSoup
r = requests.get("https://example.com")
print(r.encoding) # e.g. utf-8
soup = BeautifulSoup(r.content, "lxml", from_encoding=r.encoding)Memodifikasi dan Menserialisasi
Modifikasi pohon penguraian dan ubah kembali menjadi HTML dengan str(tag) atau soup.prettify().
from bs4 import BeautifulSoup
html = "<p>Hello <b>world</b></p>"
soup = BeautifulSoup(html, "lxml")
soup.b.decompose() # remove the <b> tag
print(str(soup.p)) # <p>Hello </p>Keterbatasan BeautifulSoup
BS4 mengurai HTML statis. BS4 tidak dapat menjalankan JavaScript. Untuk halaman yang dirender oleh JS, gunakan Playwright atau Selenium.
# BeautifulSoup: good for static HTML
# Playwright: for JavaScript-rendered SPAs
# Scrapy: for large-scale crawls with pipelines
# pip install playwright
# playwright install
# from playwright.async_api import async_playwrightPemeriksaan Singkat
Metode apa yang mengembalikan semua elemen yang cocok dengan selektor CSS di BeautifulSoup?
Ringkasan
BeautifulSoup mengurai HTML menjadi pohon yang dapat ditelusuri. Gunakan find()/find_all() untuk mencari tag, select() untuk selektor CSS, dan get_text() untuk mendapatkan teks yang bersih. Padukan dengan requests untuk halaman statis; gunakan Playwright untuk konten yang dirender oleh JS.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mengurai HTML dengan BeautifulSoup” gratis?
Ya — teks lengkap “Mengurai HTML dengan BeautifulSoup” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mengurai HTML dengan BeautifulSoup”?
Telusuri pohon hasil penguraian dan ekstrak data dengan selector. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Mengurai HTML dengan BeautifulSoup” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Permintaan HTTP dengan requests dan httpx
- Mengurai HTML dengan BeautifulSoup
- Membangun Spider Scrapy
- Menangani JavaScript dan Tindakan Anti-Scraping