HTML parsen met BeautifulSoup
Navigeer door de parse tree en extraheer gegevens met selectors.
HTML parsen met BeautifulSoup is een gratis Python Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.
BeautifulSoup installeren
beautifulsoup4 parseert HTML en XML. Gebruik de parser lxml voor snelheid of html.parser wanneer je geen afhankelijkheden wilt.
# 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) # HelloElementen vinden
find(tag) geeft het eerste overeenkomende element terug. find_all(tag) geeft een lijst met alle overeenkomende elementen terug.
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]CSS-selectoren
soup.select("css selector") gebruikt CSS-syntaxis. soup.select_one() geeft de eerste overeenkomst terug.
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/1Attributen benaderen
Benader tagattributen als een woordenboek: 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']Door de parseboom navigeren
Gebruik .parent, .children, .next_sibling en .previous_sibling om door de boom te navigeren.
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)Tekst extraheren
tag.get_text(separator=" ", strip=True) geeft alle tekst binnen een tag terug, waarbij overtollige witruimte is opgeruimd.
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 WorldScrapen met requests + BeautifulSoup
Haal een pagina op met requests en parseer deze met BeautifulSoup — de klassieke combinatie voor webscraping.
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])Relatieve URL's afhandelen
Gebruik urllib.parse.urljoin(base, href) om relatieve koppelingen om te zetten in absolute URL's.
from urllib.parse import urljoin
base = "https://example.com/products/"
href = "../about"
print(urljoin(base, href)) # https://example.com/aboutCoderingen afhandelen
BeautifulSoup detecteert de codering automatisch, maar je kunt deze ook zelf opgeven of r.encoding uit requests gebruiken.
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)Aanpassen en serialiseren
Pas de parseboom aan en zet deze met str(tag) of soup.prettify() terug om naar HTML.
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>Beperkingen van BeautifulSoup
BS4 parseert statische HTML. Het kan geen JavaScript uitvoeren. Gebruik Playwright of Selenium voor pagina's die met JavaScript worden weergegeven.
# 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_playwrightKorte controle
Welke methode geeft in BeautifulSoup alle elementen terug die overeenkomen met een CSS-selector?
Samenvatting
BeautifulSoup parseert HTML naar een navigeerbare boom. Gebruik find()/find_all() om tags te zoeken, select() voor CSS-selectoren en get_text() voor opgeschoonde tekst. Combineer dit met requests voor statische pagina's en gebruik Playwright voor inhoud die met JavaScript wordt weergegeven.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 76
- Lessen
- 320
Veelgestelde vragen
Is de les “HTML parsen met BeautifulSoup” gratis?
Ja — de volledige tekst van “HTML parsen met BeautifulSoup” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.
Wat leer ik in “HTML parsen met BeautifulSoup”?
Navigeer door de parse tree en extraheer gegevens met selectors. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Python Academy te beginnen?
Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “HTML parsen met BeautifulSoup”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Python Academy?
Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- HTTP-verzoeken met requests en httpx
- HTML parsen met BeautifulSoup
- Een Scrapy-spider bouwen
- JavaScript en antisqueermmaatregelen verwerken