Terug naar blog

Wat is Web Scraping? Principes, proces en compliance in de praktijk

Web scraping is het proces om automatisch webinhoud op te halen en om te zetten in gestructureerde data. Dit artikel legt het verschil uit tussen statische en dynamische pagina's, toolselectie, het volledige implementatietraject en de compliance-grenzen van robots.txt en persoonsgegevens.

Web scraping is het proces om met een programma webinhoud op te halen, de benodigde velden uit HTML, API-reacties of browser-renderingresultaten te extraheren en te organiseren in tabellen, JSON of databaserecords. Veelvoorkomende toepassingen zijn prijsmonitoring, het aggregeren van openbare productinformatie, sentimentanalyse, SEO-audits, analyse van vacatures en interne datamigratie.

Web scraping is niet zomaar "geautomatiseerd kopiëren en plakken". Een betrouwbaar project moet ten minste toegangsrechten, paginastructuur, dynamische rendering, paginering, deduplicatie, snelheidsbeperking, foutretries, datakwaliteit en privacy-compliance aanpakken. Technisch toegang kunnen krijgen tot een pagina betekent niet dat je recht hebt om alle gegevens ervan te verzamelen, op te slaan of te hergebruiken.

Wat is het verschil tussen Web Scraping en een webcrawler?

De twee termen worden vaak door elkaar gebruikt, maar richten zich op verschillende dingen:

  • Webcrawler richt zich op het ontdekken en doorlopen van URL's, bijvoorbeeld door vanaf een startpagina continu links te volgen om nieuwe pagina's te vinden;
  • Web Scraping richt zich op het extraheren van velden uit een doelpagina, zoals productnaam, prijs, voorraadstatus en tijdstip van laatste update;
  • Een compleet systeem doorloopt meestal eerst URL's, scrapet dan pagina's en reinigt en slaat ten slotte de gegevens op.

Zoekmachines zijn een typisch voorbeeld van een crawl- en verwerkingssysteem. Moderne pagina's kunnen ook JavaScript nodig hebben voordat de volledige inhoud zichtbaar is. Commerciële datacollectie is meestal veel kleiner van omvang, maar de basisketen van "pagina's ontdekken, inhoud ophalen, velden parsen, resultaten opslaan" is vergelijkbaar.

Hoe web scraping in principe werkt

Een scraping-taak doorloopt meestal zes fasen.

1. Het data-doel definiëren

Definieer eerst de velden die je echt nodig hebt, de updatefrequentie, de dekking en het beoogde gebruik. Zo heeft prijsmonitoring bijvoorbeeld misschien geen namen van beoordelaars nodig; een SEO-audit heeft alleen titels, statuscodes en canonical-tags nodig, niet de volledige body van elke pagina.

Hoe duidelijker het doel, hoe makkelijker het is om het aanbodvolume, de opslagkosten en het risico op persoonsgegevens te beheersen.

2. De pagina ophalen

Voor statische pagina's waar de server volledige HTML direct retourneert, is een normale HTTP-client meestal voldoende. Voor dynamische pagina's die inhoud laden met JavaScript of klikken en scrollen vereisen, moet je mogelijk een echt browserautomatiseringstool gebruiken voor de rendering.

Maar controleer voordat je een browser introduceert eerst of de site een officiële API, data-export, RSS, een sitemap of openbare datasets aanbiedt. Deze kanalen zijn meestal stabieler en makkelijker binnen de gebruiksvoorwaarden te houden.

3. Elementen parsen en lokaliseren

Zodra je de HTML hebt, gebruikt het programma CSS-selectors of XPath om inhoud te lokaliseren. De Scrapy-selectors-documentatie legt uit dat selectors knooppunten uit HTML kunnen extraheren en dat Scrapy-antwoordobjecten direct interfaces zoals .css() en .xpath() bieden.

Selectors moeten leunen op stabiele semantiek, zoals data-attributen, gestructureerde data of een duidelijke containerhiërarchie, en moeten vermijden af te hangen van willekeurige klassennamen die vaak veranderen bij redesigns.

4. Reinigen en normaliseren

Paginatekst is vaak vermengd met extra spaties, valutasymbolen, eenheden en gelokaliseerde formaten. In de reinigingsfase moet worden gestandaardiseerd:

  • tekencodering en regeleinden;
  • datums, tijdzones en getalformaten;
  • valuta's en meeteenheden;
  • relatieve URL's ten opzichte van absolute URL's;
  • ontbrekende waarden, dubbele records en uitschieters.

Het is het beste om zowel de ruwe als de gereinigde waarde te bewaren, zodat geschillen of regelwijzigingen kunnen worden herleid.

5. Opslaan en versiebeheer

Kleine hoeveelheden gegevens kunnen in CSV of spreadsheets; doorlopende taken zijn beter af in een database of objectopslag. Naast bedrijfsvelden moet je ook de bron-URL, de scraping-tijdstempel, de antwoordstatus en de data- en parserversies bewaren. Zo kun je zien of een wijziging van de site, de parse-regels of een mislukte scrape komt.

6. Monitoren en onderhouden

Websites worden herontworpen, velden verschuiven en API's veranderen. Productiescraping moet het succespercentage, het lege-waardenpercentage, het duplicaatpercentage, de responstijd, HTTP-statuscodes en het aanvraagvolume per tijdseenheid monitoren. Als een veld ineens helemaal leeg is, pauzeer de taak dan en onderzoek het, in plaats van lege waarden over goede historische gegevens te schrijven.

Statische pagina's, dynamische pagina's of API's: wat kies je?

Geef eerst de voorkeur aan de officiële API of export

Een officiële API biedt meestal stabiele velden, paginering en machtigingsmechanismen. Zolang de licentie, het quotum en de kosten aan je behoeften voldoen, is die meestal betrouwbaarder dan het parsen van pagina's.

Statische HTML is geschikt voor licht scrapen

Als je de doelgegevens kunt zien door de paginabron te bekijken, kun je een HTTP-client plus een HTML-parser gebruiken. Het start snel en verbruikt weinig resources en is geschikt voor openbare lijsten, documentatie en inhoudspagina's.

Overweeg browserautomatisering alleen voor dynamische pagina's

Alleen als inhoud verschijnt nadat scripts zijn uitgevoerd, of je klikken, filteren en scrollen binnen een gemachtigd bereik moet uitvoeren, overweeg dan tools zoals Playwright. De Playwright-BrowserType-documentatie toont de automatiseringsinterface voor het starten of verbinden van een browser.

Browserautomatisering verbruikt meer CPU en geheugen, en pagina-selectors worden makkelijker beïnvloed door redesigns. Maak het daarom niet standaard voor elk project en gebruik het nooit om loginrechten, CAPTCHA's of toegangscontroles te omzeilen.

Hoe start je een web scraping-project?

Stap 1: Bevestig rechten en alternatieve kanalen

Bekijk de servicevoorwaarden van de site, API-voorwaarden, robots.txt, copyrightmeldingen en datalicenties. Als het project inhoud achter login, betaalde inhoud, persoonsgegevens of grootschalig commercieel gebruik betreft, moet juridisch advies of een functionaris voor gegevensbescherming de basis bevestigen.

robots.txt is het standaardmechanisme waarmee een site scraping-regels aan automatische clients kenbaar maakt. RFC 9309 maakt duidelijk dat het door service-eigenaren wordt gebruikt om te bepalen hoe crawlers toegang krijgen tot bronnen, maar het is geen toegangsmachtigingsmechanisme. Met andere woorden: scraping toestaan verleent niet automatisch auteursrecht of rechten voor het verwerken van persoonsgegevens, en een verbodregel moet niet worden behandeld als een obstakel dat "technisch moet worden omzeild".

Stap 2: De paginastructuur steekproefsgewijs controleren

Kies 10–20 pagina's die verschillende pagineringen, categorieën en randgevallen bestrijken om te bevestigen dat de velden altijd op dezelfde plek staan. Controleer vooral gevallen zonder prijs, met ontbrekende afbeeldingen, uitverkochte artikelen, meerdere varianten, meertaligheid en verlopen sessies.

Stap 3: De datastructuur ontwerpen

Definieer voor elk veld een naam, type, of het verplicht is, een reinigingsregel en een unieke sleutel. Productgegevens kunnen bijvoorbeeld de bron-URL, platformproduct-ID, titel, huidige prijs, valuta, voorraadstatus en verzameltijd bevatten.

Stap 4: Bouw eerst een klein prototype

Gebruik een paar pagina's om selectors, paginering, codering, deduplicatie en foutafhandeling te valideren. Voer de hele site niet uit voordat je selectors stabiel zijn.

Stap 5: Voeg vriendelijke snelheidsbeperking toe

Stel een redelijk aanvraaginterval, een gelijktijdigheidslimiet, een timeout en exponentiële backoff in; vertraag of pauzeer actief bij 429 Too Many Requests of aanhoudende 5xx. Cache pagina's die al zijn opgehaald en zelden veranderen om dubbele aanvragen te voorkomen. Als je incrementeel kunt scrapen op updatetijd, herhaal dan niet elke dag alles volledig.

Stap 6: Live gaan met monitoring en stopcondities

Stel stopcondities in voor abnormale toestanden, zoals een plotseling opduikende CAPTCHA, verlopen login, sterk stijgend lege-waardenpercentage, structuurwijzigingen of toenemende serverfouten. Een geautomatiseerd systeem moet bij onzekerheid stoppen en wachten op menselijke bevestiging, in plaats van eindeloos opnieuw te proberen.

Hoe moet je robots.txt lezen?

robots.txt bevindt zich meestal op /robots.txt in de siteroot. Regels zijn gegroepeerd per user-agent en beschrijven paden met allow en disallow. De Google-uitleg over robots.txt benadrukt ook dat regels alleen gelden voor de corresponderende host, het protocol en de poort, en dat paden hoofdlettergevoelig zijn.

Let op:

  • robots.txt is geen wachtwoordmuur en mag niet worden gebruikt om geheime URL's te verbergen;
  • het drukt vooral crawlvoorkeuren uit en is niet gelijk aan inhoudsmachtiging;
  • de specifieke voorwaarden, contracten, intellectuele eigendom en beschermingsverplichtingen van de site moeten nog apart worden beoordeeld;
  • ook zonder robots.txt betekent het niet dat je met onbeperkte gelijktijdigheid kunt scrapen of zomaar iets kunt verzamelen;
  • een project moet een herkenbare user-agent en contactgegevens gebruiken, in plaats van zich voor te doen als een normale gebruiker om governance te ontwijken.

Wat zijn de compliance-risico's van web scraping?

Persoonsgegevens

Publiek zichtbaar betekent niet dat gegevens onbeperkt mogen worden verwerkt. Als gegevens een persoon direct of indirect kunnen identificeren, kan de verzamelaar nog steeds verplichtingen hebben op het gebied van kennisgeving, rechtsgrond, bewaartermijnen, beveiliging en rechtenrespons.

De uitleg van de Europese Commissie over AVG-principes somt principes op als rechtmatigheid, billijkheid en transparantie, doelbinding, dataminimalisatie, opslagbeperking, juistheid, beveiliging en verantwoordingsplicht. Dataprojecten gericht op personen in de EU mogen alleen de velden verzamelen die nodig zijn voor een opgegeven doel en moeten verwijder- of herzieningstermijnen vaststellen.

Auteursrecht en databankrechten

Feiten en de expressie van een pagina kunnen op verschillende manieren worden beschermd; het kopiëren van grote hoeveelheden bodytekst, afbeeldingen, reacties of databankinhoud brengt een hoger risico met zich mee dan alleen het vastleggen van de noodzakelijke feitelijke velden. Of je kunt publiceren, modellen trainen of commercieel doorverkopen, hangt af van de jurisdictie, de licentie en het beoogde gebruik.

Contracten en toegangscontrole

Sitevoorwaarden kunnen automatische toegang, datahergebruik of accountdeling beperken. Je mag login, paywalls, CAPTCHA's, frequentielimieten of andere technische toegangscontroles niet omzeilen. Als een project beperkte gegevens moet verkrijgen, verkrijg dan eerst uitdrukkelijke toestemming.

Impact op de service van de site

Overmatige gelijktijdigheid verhoogt de kosten van de wederpartij en treft normale gebruikers. Snelheidsbeperking, caching, incrementele updates, gespreide planning en duidelijke stopcondities zijn zowel kwaliteitseisen voor engineering als basis-service-etiquette.

Hoe houd je browserautomatiseringstaken beter onder controle?

Wanneer scraping echt browser-rendering vereist, of meerdere accounts, meerdere omgevingen en teamsamenwerking omvat, worden traceerbaarheid en rechtenbeheer cruciaal. Je kunt die browserbewerkingen organiseren in controleerbare, beheersbare workflows:

  • Isoleren van browseromgevingen per klant of project om vermenging van cookies en sessies te verminderen;
  • Geef uitvoerende leden alleen de benodigde rechten, in plaats van accountwachtwoorden te delen;
  • Gebruik operationele logboeken om vast te leggen wie welke taak wanneer startte;
  • Stel kleine batch-wachtrijen en gelijktijdigheidslimieten in voor pagina's die moeten worden gerenderd, zodat de aanvraagintensiteit onder controle blijft;
  • Valideer selectors in een testomgeving voordat je taken binnen de gemachtigde scope geleidelijk uitbreidt;
  • Behoud bij integratie met interne planning timeouts, snelheidslimieten en handmatige stopmechanismen.

Houd er rekening mee dat geen enkele browserautomatiseringstool ongeautoriseerde datacollectie in een conforme activiteit kan veranderen, en het mag niet worden gebruikt om CAPTCHA's, bans, paywalls of platformlimieten te omzeilen. Bevestig vóór de automatisering de databron, rechten en het beoogde gebruik. Als je geautoriseerde browserworkflows moet beheren, overweeg dan een geschikte browserautomatiseringsbeheertool om een testomgeving op te zetten.

Veelgestelde vragen

Is web scraping legaal?

Er is geen enkel antwoord dat voor alle landen, websites en datatypes geldt. Je moet sitevoorwaarden, toegangsmethoden, auteursrecht, databankrechten, persoonsgegevens, commerciële concurrentie en lokale wetten samen overwegen. Raadpleeg voor risicovolle of grootschalige projecten een professionele juridische adviseur.

Mag ik vrij scrapen als robots.txt het toestaat?

Nee. robots.txt is een scraping-regel, geen auteursrechtlicentie, contractontheffing of toestemming om persoonsgegevens te verwerken.

Moet ik statische pagina's scrapen of een headless browser gebruiken?

Geef de voorkeur aan de lichte aanpak wanneer je gegevens via een officiële API of statische HTML kunt verkrijgen; gebruik browserautomatisering alleen wanneer de doelinhoud echt afhangt van JavaScript of geautoriseerde interactie.

Hoe vermijd ik vuile data door redesigns van pagina's?

Bewaar de bron en tijdstempels, stel veldvalidatie en lege-waardenmeldingen in, versioneer je parse-regels en stop met schrijven bij afwijkingen in plaats van historische gegevens te overschrijven.

Samenvatting

De kern van web scraping is niet "de pagina ophalen", maar webinformatie op een gecontroleerde, verifieerbare en onderhoudbare manier omzetten in gestructureerde data. Een volwassen workflow geeft de voorkeur aan officiële interfaces, respecteert robots.txt en servicevoorwaarden, controleert de aanvraagintensiteit, minimaliseert persoonsgegevens en ontwerpt stopmechanismen voor structuurwijzigingen en abnormale toestanden.

Wanneer rechten, datamodellering en monitoring allemaal vóór schaalvergroting komen, kan web scraping echt stabiele data-infrastructuur worden in plaats van een fragiel eenmalig script.