Python Academy · Les

HTML parsen met BeautifulSoup

Navigeer door de parse tree en extraheer gegevens met selectors.

Les 2 van 413 stappen

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)   # Hello

Elementen 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/1

Attributen 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 World

Scrapen 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/about

Coderingen 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_playwright

Korte 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.

Gratis beginnen

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

  1. HTTP-verzoeken met requests en httpx
  2. HTML parsen met BeautifulSoup
  3. Een Scrapy-spider bouwen
  4. JavaScript en antisqueermmaatregelen verwerken
← Terug naar Python Academy