Skip to content
Programmeren in Python, leer de nieuwste technieken
Programmeren in PythonProgrammeren in Python
  • Home
  • Blog
  • Documentatie
  • Cursussen
Programmeren in PythonProgrammeren in Python
  • Home
  • Blog
  • Documentatie
  • Cursussen

Introductie

4
  • 1.1 Wat is Python?
  • 1.2 Python installatie
  • 1.2.1 Python installeren voor MacOS
  • 1.3 PyCharm Installatie

Basisprogrammering

6
  • 2.1 Python Basis: Variabelen, Datatypes en Operatoren
  • 2.2 Python if else (en elif)
  • 2.3 Python list (Array, Lijsten)
  • 2.4 Python Lussen: for loop, while loop, break, continue
  • 2.5 Python Functies: Definities, Parameters en Terugkeerwaarden
  • 2.6 Foutafhandeling: try, except, else, finally

Datatypes

13
  • 3.1 Introductie tot Geavanceerde Datatypes
  • 3.2 Python Tuple
  • 3.3 Python Set
  • 3.4 Python Dictionary
  • 3.5 Werken met Strings en String-methoden
  • 3.6 Collections Module: Krachtige Tools in Python
  • 3.7 Iterators en Generators
  • 3.8 List Comprehensions
  • 3.9 Geavanceerde Sortering
  • 3.10 Werken met Multi-dimensionale Data
  • 3.11 Typing en Datatypes
  • 3.12 Itertools voor Geavanceerde Iteraties
  • 3.13 Data Conversies

Modules

8
  • 4.1 Wat zijn Modules en Waarom zijn ze Belangrijk?
  • 4.2 Werken met Ingebouwde Modules
  • 4.3 Installeren en Gebruiken van Externe Pakketten
  • 4.4 Eigen Modules Maken
  • 4.5 Introductie tot Pakketten
  • 4.6 Importeren en Namespaces Begrijpen
  • 4.7 Geavanceerd: Relatief Importeren
  • 4.8 Organiseren van Grotere Projecten

Data Analyse

3
  • 5.1 Python Dataframe en Data Opschonen met Pandas
  • 5.2 Python Pandas Basisstatistieken en Data-analyse
  • 5.3 Python Numpy (NpArray): De Kracht van Numerieke Berekeningen

Webontwikkeling

6
  • 7.1 Inleiding tot Webontwikkeling
  • 7.2 HTTP-Verzoeken met requests: Communiceren met het Web
  • 7.3 Webscraping met BeautifulSoup: Data van het Web Halen als er geen APIs zijn
  • 7.4 Python Flask, een webserver & API tutorial
  • 7.5 WSGI & WebOb
  • 7.6 FastAPI tutorial (Nederlands) – API bouwen met Python + Uvicorn

Deploy

1
  • Deploy met Supervisor op Ubuntu

Object Georiënteerd Programmeren

8
  • Wat is Objectgeoriënteerd Programmeren (OOP) in Python?
  • Python class & object maken
  • self en __init__ uitgelegd (met voorbeelden)
  • Attributen afschermen: @property (getters/setters)
  • Overerving in Python + super() (en wanneer je het beter níet doet)
  • Dunder methods: __str__, __repr__, vergelijken (en waarom dit je OOP-code “Pythonic” maakt)
  • @dataclass: snelle nette classes (minder boilerplate, meer duidelijkheid)
  • OOP in de praktijk: design & structuur
View Categories
  • Home
  • Documentatie
  • Webontwikkeling
  • 7.3 Webscraping met BeautifulSoup: Data van het Web Halen als er geen APIs zijn

7.3 Webscraping met BeautifulSoup: Data van het Web Halen als er geen APIs zijn

9 minuten leestijd

Heb je ooit een website bezocht en gedacht: “Hoe handig zou het zijn als ik deze informatie automatisch kon verzamelen?” Dat is precies wat webscraping doet! Met webscraping kun je gegevens van websites halen en gebruiken voor je eigen projecten, zoals het analyseren van prijzen, het verzamelen van gegevens voor onderzoek, of zelfs het bouwen van een gepersonaliseerde nieuwsfeed.

In dit hoofdstuk leer je wat webscraping is, hoe je het correct en ethisch uitvoert, en hoe je Python en de BeautifulSoup-bibliotheek gebruikt om gegevens van websites te halen. 🎉

Wat is webscraping en wanneer gebruik je het? #

Webscraping is het proces van het automatisch verzamelen van gegevens van websites. Met een webscraper kun je gegevens zoals tekst, afbeeldingen, of tabellen van webpagina’s extraheren en in een bruikbaar formaat opslaan (zoals CSV of JSON).

Wanneer gebruik je webscraping? #

  • Data-analyse: Prijzen van producten volgen, trends in sociale media analyseren, of publieke datasets verzamelen.
  • Automatisering: Handmatige taken zoals het kopiëren van gegevens vervangen door een script.
  • Onderzoek: Relevante informatie verzamelen van meerdere bronnen.
  • Persoonlijke projecten: Bijv. een scraper bouwen om sportuitslagen of weersinformatie te verzamelen.

Belangrijk: Controleer altijd de gebruiksvoorwaarden van een website voordat je gegevens verzamelt. Respecteer de ethiek van webscraping en belast de server niet onnodig.

HTML en CSS Begrijpen om Data te Vinden #

Voordat je gegevens van een webpagina kunt halen, moet je begrijpen hoe websites zijn opgebouwd. Websites gebruiken HTML (HyperText Markup Language) en CSS (Cascading Style Sheets) om inhoud en stijl te definiëren.

De structuur van HTML #

HTML is opgebouwd uit elementen die worden weergegeven als geneste blokken.

Voorbeeld: Een eenvoudige HTML-structuur

<!DOCTYPE html>
<html>
  <head>
    <title>Voorbeeldpagina</title>
  </head>
  <body>
    <h1>Welkom!</h1>
    <p>Dit is een voorbeeld.</p>
  </body>
</html>
Python

  • <html>: De hoofdomslag van de pagina.
  • <head>: Bevat metadata zoals de titel.
  • <body>: De zichtbare inhoud van de pagina.

CSS-selectors begrijpen #

CSS definieert hoe elementen eruitzien en wordt vaak gebruikt om specifieke delen van de pagina te vinden. Bijvoorbeeld:

  • Klassen (class) worden aangeduid met een punt (.): .product-title.
  • IDs (id) worden aangeduid met een hashtag (#): #main-header.

Voorbeeld: HTML met klassen en ID’s

<div id="product">
  <h2 class="product-title">Laptop</h2>
  <p class="price">€999</p>
</div>
Python

Gebruik van BeautifulSoup #

BeautifulSoup is een krachtige Python-bibliotheek die je helpt HTML- en XML-documenten te parsen (analyseren en bewerken). Hiermee kun je specifieke elementen vinden, gegevens extraheren, en de inhoud manipuleren.

Installeren van BeautifulSoup #

Voordat je aan de slag gaat, moet je de bibliotheek installeren:

pip install beautifulsoup4 requests
Python

HTML Parsen #

Laten we beginnen met een eenvoudig voorbeeld om HTML te parsen.

Codevoorbeeld:

from bs4 import BeautifulSoup

# Een voorbeeld-HTML
html = """
<html>
  <body>
    <h1>Welkom!</h1>
    <p>Dit is een voorbeeld.</p>
  </body>
</html>
"""

# Maak een BeautifulSoup-object
soup = BeautifulSoup(html, "html.parser")

# Toegang tot elementen
print(soup.h1.text)  # "Welkom!"
print(soup.p.text)   # "Dit is een voorbeeld."
Python

Specifieke data ophalen #

Met BeautifulSoup kun je specifieke gegevens ophalen, zoals teksten, tabellen, of afbeeldingen. Dit wordt gedaan met selectors zoals find(), find_all(), en CSS-selectors.

Voorbeeld: Gegevens ophalen uit HTML

html = """
<div id="product">
  <h2 class="product-title">Laptop</h2>
  <p class="price">€999</p>
</div>
"""

# Parse de HTML
soup = BeautifulSoup(html, "html.parser")

# Specifieke elementen ophalen
titel = soup.find("h2", class_="product-title").text
prijs = soup.find("p", class_="price").text

print(f"Product: {titel}, Prijs: {prijs}")
Python

Output:

Product: Laptop, Prijs: €999
Python

Tabellen scrapen #

Tabellen zijn een veelvoorkomende manier om gegevens op websites weer te geven.

Voorbeeld: Een tabel uitlezen

html = """
<table>
  <tr><th>Naam</th><th>Leeftijd</th></tr>
  <tr><td>Jan</td><td>30</td></tr>
  <tr><td>Lisa</td><td>25</td></tr>
</table>
"""

soup = BeautifulSoup(html, "html.parser")

# Vind alle rijen
rows = soup.find_all("tr")

for row in rows[1:]:  # Sla de header over
    cols = row.find_all("td")
    naam = cols[0].text
    leeftijd = cols[1].text
    print(f"Naam: {naam}, Leeftijd: {leeftijd}")
Python

Complexer Webscraping Voorbeeld: Specifieke Elementen Selecteren #

Laten we een scenario uitwerken waarin een pagina meerdere producten heeft, en we alleen informatie willen ophalen van het tweede product. Deze producten hebben dezelfde CSS-klasse en zijn genest binnen een container.

HTML Voorbeeld:

<div class="product-list">
  <div class="product">
    <h2 class="product-title">Laptop</h2>
    <p class="price">€999</p>
  </div>
  <div class="product">
    <h2 class="product-title">Tablet</h2>
    <p class="price">€499</p>
  </div>
  <div class="product">
    <h2 class="product-title">Smartphone</h2>
    <p class="price">€799</p>
  </div>
</div>
Python

Hier gebruiken we CSS-selectors en indexering om specifieke elementen op te halen, zoals het tweede product.

from bs4 import BeautifulSoup

# HTML-code parsen
html = """
<div class="product-list">
  <div class="product">
    <h2 class="product-title">Laptop</h2>
    <p class="price">€999</p>
  </div>
  <div class="product">
    <h2 class="product-title">Tablet</h2>
    <p class="price">€499</p>
  </div>
  <div class="product">
    <h2 class="product-title">Smartphone</h2>
    <p class="price">€799</p>
  </div>
</div>
"""

soup = BeautifulSoup(html, "html.parser")

# Stap 1: Selecteer alle producten
producten = soup.find_all("div", class_="product")

# Stap 2: Selecteer het tweede product (index 1)
tweede_product = producten[1]  # Indexering begint bij 0

# Stap 3: Extracteer de titel en prijs
titel = tweede_product.find("h2", class_="product-title").text
prijs = tweede_product.find("p", class_="price").text

print(f"Tweede product: {titel}, Prijs: {prijs}")
Python

Alternatief: Gebruik CSS-selectors #

Je kunt ook CSS-selectors gebruiken met select() voor meer flexibiliteit, zoals het direct selecteren van het tweede product.

# Gebruik een CSS-selector om het tweede product te selecteren
tweede_product = soup.select(".product-list .product:nth-of-type(2)")[0]

# Extracteer de titel en prijs
titel = tweede_product.select_one(".product-title").text
prijs = tweede_product.select_one(".price").text

print(f"Tweede product: {titel}, Prijs: {prijs}")
Python

Output:

Tweede product: Tablet, Prijs: €499
Python

Wat gebeurt hier?

  • .product-list .product:nth-of-type(2): Selecteert het tweede <div>-element met de klasse product binnen de container product-list.
  • select_one(): Pakt het eerste resultaat dat overeenkomt met de selector.

Geneste Structuren #

Als de HTML meer genest is, kun je BeautifulSoup gebruiken om door verschillende lagen te navigeren.

HTML voorbeeld:

<div class="store">
  <div class="product-list">
    <div class="product">
      <h2 class="product-title">Laptop</h2>
      <p class="price">€999</p>
    </div>
    <div class="product">
      <h2 class="product-title">Tablet</h2>
      <p class="price">€499</p>
    </div>
  </div>
  <div class="product-list">
    <div class="product">
      <h2 class="product-title">Desktop</h2>
      <p class="price">€1199</p>
    </div>
  </div>
</div>
Python

Code:

# Vind de tweede productlijst
tweede_lijst = soup.select(".store .product-list")[1]  
# Selecteer de tweede lijst

# Selecteer het eerste product in de tweede lijst
eerste_product = tweede_lijst.select_one(".product")

# Extracteer gegevens
titel = eerste_product.find("h2", class_="product-title").text
prijs = eerste_product.find("p", class_="price").text

print(f"Eerste product in tweede lijst: {titel}, Prijs: {prijs}")
Python

Output:

Eerste product in tweede lijst: Desktop, Prijs: €1199
Python

Wanneer CSS-selectors vs. Index gebruiken? #

  • CSS-selectors: Handig voor complexe structuren en direct selecteren van specifieke elementen (zoals nth-of-type).
  • Indexering: Geschikt als je al een lijst hebt (zoals find_all) en eenvoudig specifieke elementen wilt ophalen.

Omgaan met anti-scraping maatregelen #

Sommige websites proberen scraping te voorkomen. Hier zijn strategieën om dit ethisch en effectief aan te pakken:

  1. Respecteer robots.txt: Controleer de robots.txt van een website om te zien wat wel en niet gescrapet mag worden.
https://example.com/robots.txt
Python

  1. Voeg vertragingen toe: Gebruik tijdsvertragingen tussen verzoeken om de server niet te belasten.
  2. Stel een user-agent in: Sommige servers blokkeren verzoeken zonder een geldige user-agent. Stel deze in met de headers-parameter.
import requests
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get("https://example.com", headers=headers)
Python
  1. Omgaan met dynamische inhoud: Voor websites die JavaScript gebruiken om inhoud te laden, gebruik een tool zoals Selenium.

Samenvatting #

Met webscraping en BeautifulSoup kun je krachtige tools bouwen om gegevens van websites te verzamelen. Door HTML en CSS te begrijpen, specifieke elementen te scrapen, en anti-scraping maatregelen te respecteren, kun je een efficiënte en ethische scraper ontwikkelen.

Begin met kleine projecten, zoals het verzamelen van productprijzen, en bouw je vaardigheden op voor meer complexe uitdagingen! 🎉🚀

Updated on februari 6, 2025

What are your Feelings

7.2 HTTP-Verzoeken met requests: Communiceren met het Web7.4 Python Flask, een webserver & API tutorial
Inhoudsopgave
  • Wat is webscraping en wanneer gebruik je het?
    • Wanneer gebruik je webscraping?
  • HTML en CSS Begrijpen om Data te Vinden
    • De structuur van HTML
  • Welkom!
    • CSS-selectors begrijpen
    • Laptop
      • Gebruik van BeautifulSoup
        • Installeren van BeautifulSoup
        • HTML Parsen
  • Welkom!
  • Welkom!
    • Specifieke data ophalen
    • Laptop
    • Laptop
      • Tabellen scrapen
      • Complexer Webscraping Voorbeeld: Specifieke Elementen Selecteren
    • Laptop
    • Tablet
    • Smartphone
    • Laptop
    • Tablet
    • Smartphone
    • Laptop
    • Tablet
    • Smartphone
      • Alternatief: Gebruik CSS-selectors
      • Geneste Structuren
    • Laptop
    • Tablet
    • Desktop
      • Wanneer CSS-selectors vs. Index gebruiken?
      • Omgaan met anti-scraping maatregelen
      • Samenvatting
Programmeren in Python

Leer python op je eigen tempo met mooie interactieve hedendaagse voorbeelden.

© Copyright 2026 Programmeren in Python.
Sign inSign up

Sign in

Don’t have an account? Sign up
Lost your password?

Sign up

Already have an account? Sign in