Webscraper met Python: complete handleiding voor 2026
Maak je eigen webscraper met Python vanaf nul. Een stapsgewijze handleiding voor het kiezen van bibliotheken, het extraheren van gegevens en het automatiseren van de analyse met ELECTE.

Je hebt waarschijnlijk te maken met een heel concrete situatie. Je hebt behoefte aan concurrerende prijzen, advertenties, recensies, catalogi, openbare gegevens of content van verticale portals. Het alternatief is bijna altijd hetzelfde: handmatig kopiëren en plakken, onvolledige exports, beperkte API’s of gegevens die verspreid staan over pagina’s die niemand binnen het bedrijf op een consistente manier kan verzamelen.
Hier houdt een web scraper with python op een technische oefening te zijn en wordt het een operationeel asset. Python is de meest praktische keuze wanneer je van webpagina's naar schone datasets wilt gaan, omdat het je toelaat te beginnen met eenvoudige scripts en vervolgens te evolueren naar geavanceerdere crawlers, browser automation en analysepipelines.
In de Italiaanse context is dit onderwerp nog relevanter. Python is inmiddels een standaard bij het werken met automatisering en data-analyse, en scraping is een van de meest gebruikte toepassingen binnen bedrijven. Het echte verschil wordt echter niet gemaakt door degene die ‘gegevens downloadt’. Het wordt gemaakt door degene die de juiste bibliotheek weet te kiezen, de klassieke fouten weet te vermijden, de AVG en de gebruiksvoorwaarden naleeft, en gegevens levert die het bedrijf kan lezen en gebruiken.
Inleiding: Het internet omvormen tot een bron van strategische gegevens
Veel eerste scrapingprojecten komen voort uit een eenvoudige behoefte. De prijzen van een concurrent in de gaten houden, koppen verzamelen van een brancheportaal, een productlijst samenstellen, aanbestedingen of advertenties volgen. Het probleem is niet het vinden van de gegevens. Het probleem is ze op een herhaalbare, schone en voldoende betrouwbare manier te verzamelen om ze te kunnen gebruiken bij het nemen van beslissingen.
Een web scraper with python lost precies dit op. Hiermee kun je een pagina bezoeken, de inhoud downloaden, de nuttige elementen identificeren en ze opslaan in een gestructureerd formaat. Als je aan het begin goed werk levert, kun je een handmatige en fragiele activiteit omzetten in een stabiele flow.
Het deel dat in tutorials vaak over het hoofd wordt gezien, is het belangrijkste in de praktijk. Het is niet genoeg om gewoon te ‘scrapen’. Je moet het juiste complexiteitsniveau kiezen. Voor veel websites volstaan Requests en BeautifulSoup. Andere vereisen Selenium of Playwright omdat de inhoud door JavaScript wordt gegenereerd. Bij grotere projecten komt Scrapy om de hoek kijken. En wanneer de gegevens betrekking hebben op personen, profielen of contactgegevens, is ook een nauwkeurige juridische aanpak vereist.
Een goede scraper is niet degene die de meeste gegevens verzamelt. Het is degene die de juiste gegevens verzamelt, tegen de laagste onderhoudskosten.
Waarom Python het ideale hulpmiddel is voor webscraping
Python domineert dit domein om een praktische reden. Het stelt je in staat om heel snel van een idee naar een werkend script te gaan, zonder te veel in te leveren wanneer het project groeit. Op de Italiaanse markt is dit niet alleen een technische voorkeur. Volgens de gegevens van 2023 van het Osservatorio Digital Innovation van het Politecnico di Milano wordt Python door 75% van de Italiaanse bedrijven ingezet voor data-analyse en automatisering, met web scraping als een van de belangrijkste toepassingen. In diezelfde lijn heeft in 2022 40% van de kmo's in Lombardije Python-scrapers geïmplementeerd voor het monitoren van concurrentieprijzen, met een toename van de concurrentiepositie van 25% in de retail, zoals vermeld op de referentiepagina van de Universiteit van Texas over scraping met Python.
Python werkt goed omdat het de drempel verlaagt
De grootste kracht van Python is de leesbaarheid. Of je nu een script aan een collega moet uitleggen, HTML-selectors moet debuggen of over twee weken de logica van het uitlezen moet aanpassen: de duidelijkheid van de code is belangrijker dan je zou denken.
De tweede factor is het ecosysteem. Er zijn volwassen bibliotheken voor vrijwel elk niveau van het werk:
- Requests om HTML te downloaden of endpoints te bevragen.
- BeautifulSoup om door de DOM te navigeren en tekst, links en attributen op te halen.
- Selenium en Playwright voor sites die afhankelijk zijn van browser rendering.
- Scrapy wanneer je spiders, pipelines, retries en export op een meer industriële manier moet organiseren.
- Pandas wanneer de volgende stap het opschonen en analyseren van de data is.
De juiste keuze hangt af van de locatie
Veel beginners maken hier een fout. Ze zien Selenium en denken dat dit altijd de beste oplossing is. Dat is niet zo.
Bij een statische pagina leidt het gebruik van een volledige browser tot een hoger verbruik van systeembronnen, tragere code en meer kwetsbare punten. Daarentegen leidt het gebruik van alleen Requests op een site die gegevens via JavaScript laadt tot een klassiek resultaat: vrijwel lege HTML en geen bruikbare gegevens.
Het is verstandig om het als volgt te bekijken:
- Eenvoudige site met HTML dat al aanwezig is. Begin met Requests + BeautifulSoup.
- Site met content die na het laden wordt geladen. Ga over op Playwright of Selenium.
- Veel pagina's, terugkerende structuur, noodzaak om te crawlen. Overweeg Scrapy.
- Data beschikbaar via een JSON-endpoint. Gebruik beter dat endpoint dan de HTML te parsen.
Praktische regel: kies altijd het eenvoudigste hulpmiddel dat daadwerkelijk de data kan lezen die je nodig hebt.
Een ander voordeel van Python is dat deze overgang geleidelijk verloopt. Je hoeft niet elke keer alles opnieuw te schrijven. Vaak kun je de parse-logica behouden en alleen de manier waarop je de pagina ophaalt aanpassen.
De juiste Python-bibliotheken kiezen voor elke taak
De nuttigste manier om een library te kiezen is niet jezelf af te vragen welke “de beste” is. De juiste vraag is een andere: wat voor soort site moet ik lezen, hoe lang moet dit project duren en hoeveel onderhoud kan ik me veroorloven?
Een rapport van 2025 van Unioncamere Lombardia geeft aan dat veel technologiebedrijven in Lombardije Python gebruiken voor scraping, wat in belangrijke mate bijdraagt aan de regionale economische waarde. In datzelfde kader kent Scrapy een adoptiegraad van 45% onder Italiaanse ontwikkelaars en wordt Selenium gebruikt in 55% van de projecten die interactie met JavaScript-sites vereisen, met een vermindering van CAPTCHA-blokkeringen van 90% wanneer gecombineerd met proxy's, volgens de referentiepagina van ScraperAPI over scraping met Python.
Een lichte stack voor statische pagina's
Als de inhoud al in de oorspronkelijke HTML staat, maak het jezelf dan niet onnodig moeilijk.
Requests + BeautifulSoup is nog steeds het meest verstandige startpunt voor:
- redactionele sites met een regelmatige structuur
- eenvoudige openbare directory's
- productpagina's die server-side worden gerenderd
- listingpagina's zonder bijzondere interacties
Deze stack is ideaal als je:
- snel een scraper opstarten
- gemakkelijk debuggen
- data opslaan in CSV of JSON
- de code leesbaar houden, ook voor collega's die geen specialisten zijn
Een klein voorbeeld:
import requestsfrom bs4 import BeautifulSoupurl = "https://example.com/news"response = requests.get(url, timeout=20)response.raise_for_status()soup = BeautifulSoup(response.text, "html.parser")for article in soup.select("article"):title = article.select_one("h2")link = article.select_one("a")if title and link:print(title.get_text(strip=True), link.get("href"))
Deze aanpak werkt goed, zolang de gegevens daadwerkelijk in de HTML-broncode staan. Open voordat je deze methode gebruikt ‘Paginabron weergeven’, en niet alleen ‘Inspecteren’. Als de gegevens niet in de broncode staan, volstaat Requests alleen niet.
Wanneer je een echte browser nodig hebt
Als je asynchroon laden, knoppen als 'meer laden', oneindig scrollen, inhoud die door frontend-frameworks wordt gegenereerd of verplichte gebruikersinteracties ziet, dan lost de HTML-parser alleen het probleem niet op.
In deze gevallen komen Selenium en Playwright om de hoek kijken.
Selenium is een stabiele en zeer verspreide keuze. Het is geschikt wanneer je moet:
- knoppen aanklikken
- velden invullen
- wachten op elementen die door de browser worden geladen
- complexe sites met gebruikersflows beheren
Playwright biedt doorgaans een modernere en schonere API. Als je vandaag begint, vinden veel teams het overzichtelijker voor:
- betrouwbaardere wachttijden
- multi-browserbeheer
- geordende headless-automatisering
- interacties op SPA's en moderne interfaces
Een reële afweging: browserautomatisering biedt meer mogelijkheden, maar gaat ook gepaard met een hoger geheugengebruik, langere verwerkingstijden en meer onderhoud.
Als je een JSON-eindpunt in het netwerkverkeer kunt uitlezen, doe dat dan. Dat is bijna altijd betrouwbaarder dan het simuleren van klikken en scrollen.
Wanneer het project niet langer een script is
Er komt een moment dat je niet langer gewoon ‘aan het scrapen’ bent. Je bent bezig een proces op te zetten.
Hier wordt Scrapy interessant. Niet omdat het eenvoudiger is, maar omdat het beter organiseert:
- verzoekenwachtrijen
- beheer van paginering
- retries
- throttling
- opschoningspipelines
- gestructureerde exports
Ik raad dit aan als je met veel categorieën, veel pagina’s of meerdere domeinen met terugkerende patronen moet werken. Voor een eenmalige gegevensopvraging is het vaak overbodig. Voor een doorlopende crawler voorkomt het daarentegen dat je onderdelen steeds opnieuw moet uitvinden die je anders over verschillende scripts zou verspreiden.
Je kunt ook een hybride aanpak hanteren:
- Requests voor snelle tests.
- Playwright om dynamische gevallen te verifiëren.
- Scrapy wanneer het proces in productie gaat.
Overzichtstabel
BibliotheekIdeaal gebruiksscenarioJavaScript-beheerLeercurveSnelheidVerzoekenStatische pagina's, API's, snelle prototypesNeeLaagHoogBeautifulSoupEenvoudige en leesbare HTML-parsingNeeLaagGemiddeldSeleniumBrowserinteractie, formulieren, klikken, dynamische websitesJaGemiddeldLaagPlaywrightModerne dynamische websites, stabielere wachttijdenJaGemiddeldGemiddeldScrapyGrootschalig crawlen, gestructureerde processenNiet-native, moet worden uitgebreidHoogHoog
Praktische handleiding voor het maken van je eerste scraper
De eerste versie van een scraper moet een paar dingen goed doen. Een pagina lezen. De juiste elementen vinden. De tekst opschonen. De uitvoer opslaan in een bruikbaar formaat. Meer niet.
De ruimte en bijgebouwen voorbereiden
Houd het project geïsoleerd. Een virtuele omgeving voorkomt conflicten en zorgt ervoor dat het werk reproduceerbaar is.
Installeer alleen het hoogstnodige:
pip install requests beautifulsoup4
Basisopbouw:
scraper.pyvoor de codeoutput.csvvoor de export- een intern README-bestand met de doel-URL, gebruikte selectors en operationele notities
Het klinkt misschien simpel, maar als je de gebruikte selectie-elementen meteen vastlegt, bespaar je tijd wanneer de website verandert.
Controleer de pagina voordat je code schrijft
Open de doelpagina in de browser en gebruik de ontwikkelaarstools. Zoek naar de knooppunten die daadwerkelijk de gegevens bevatten die je interesseren.
Stel dat we het volgende willen extraheren:
- titel van het nieuwsbericht
- link naar het nieuwsbericht
Controleer drie dingen:
- Staat de inhoud in de HTML-broncode?
- Hebben de elementen voldoende stabiele classes of tags?
- Is de link absoluut of relatief?
Kies geen fragiele selectors, zoals classes die automatisch door de frontend worden gegenereerd. Als je een article, een h2 of een gebied met een consistente structuur kunt selecteren, gaat je scraper langer mee.
Een eenvoudige scraper schrijven met Requests en BeautifulSoup
Hier is een volledig en duidelijk voorbeeld.
import csvimport requestsfrom bs4 import BeautifulSoupfrom urllib.parse import urljoinBASE_URL = "https://example.com"TARGET_URL = "https://example.com/news"headers = {"User-Agent": "Mozilla/5.0"}response = requests.get(TARGET_URL, headers=headers, timeout=20)response.raise_for_status()soup = BeautifulSoup(response.text, "html.parser")rows = []for card in soup.select("article"):title_el = card.select_one("h2")link_el = card.select_one("a")if not title_el or not link_el:continuetitle = title_el.get_text(strip=True)link = urljoin(BASE_URL, link_el.get("href", "").strip())if title and link:rows.append({"titolo": title,"url": link})with open("output.csv", "w", newline="", encoding="utf-8") as f:writer = csv.DictWriter(f, fieldnames=["titolo", "url"])writer.writeheader()writer.writerows(rows)print(f"Elementi estratti: {len(rows)}")
Voor een eerste web scraper with python is deze structuur al meer dan voldoende.
De stroom is lineair:
- download je de pagina
- bouw je de parser
- selecteer je de herhaalde blokken
- extraheer je de velden
- sla je de output op
Resultaten opschonen en opslaan
De kwaliteit van de gegevens wordt hier bepaald. De meest voorkomende problemen zijn niet van technische aard. Ze zijn operationeel:
- titels met extra spaties
- relatieve links
- dubbele rijen
- onregelmatige encoding
- lege velden
Open het CSV-bestand echt voordat je het oplevert. Als het bestand in Excel terechtkomt, is het verstandig om te controleren of kolommen en tekens leesbaar zijn. Als je hierbij hulp nodig hebt, kan deze gids van Electe over hoe je CSV-bestanden in Excel beheert nuttig zijn.
Een scraper die een onvolledige CSV-bestand genereert, schuift het probleem alleen maar door. Het lost het niet op.
Goede gewoontes om meteen toe te passen:
- Gebruik
strip()om tekst op te schonen. - Valideer kritieke velden voordat je opslaat.
- Normaliseer URL's met
urljoin. - Controleer op duplicaten als de pagina elementen herhaalt.
- Handel HTTP-fouten af met
raise_for_status().
Als het resultaat je kwetsbaar lijkt, dan is het dat ook. Zorg ervoor dat de basis stevig staat voordat je nieuwe functies toevoegt.
Geavanceerde obstakels zoals JavaScript en anti-botmaatregelen overwinnen
Als een scraper een bijna lege pagina teruggeeft, ligt het probleem meestal niet bij Python. Het probleem zit hem in het weergavemodel van de website. Veel moderne interfaces laden gegevens pas na de eerste HTML, via asynchrone verzoeken of JavaScript-componenten. Requests haalt het oorspronkelijke document op. Het is geen browser.
Begrijpen waarom een pagina geen gegevens weergeeft
Voordat je overstapt naar Selenium of Playwright, controleer je even snel de ontwikkelaarstools:
- controleer het tabblad Network
- filter op Fetch/XHR-verzoeken
- zoek naar JSON-antwoorden
- controleer of de nuttige data via aparte endpoints binnenkomt
Als je een overzichtelijke en leesbare endpoint vindt, is dat vaak de beste keuze. Je krijgt dan beter gestructureerde gegevens, minder HTML-ruis en minder onderhoud.
Als de website de inhoud echter daadwerkelijk in de browser opbouwt, maakt hij gebruik van browserautomatisering. In dat geval zijn de juiste wachttijden nodig. De juiste aanpak is niet „5 seconden wachten en hopen“. Je moet wachten tot het element aanwezig is of tot een waarneembare voorwaarde is vervuld.
Botbeveiliging kan niet met brute kracht worden aangepakt
Veel websites blokkeren agressieve scraping om hun infrastructuur, gegevens en gebruikerservaring te beschermen. Als je te veel verzoeken verstuurt, onnatuurlijke headers gebruikt of herhaaldelijk browsersessies opent, zal de website hierop reageren.
De meest voorkomende fouten zijn altijd dezelfde:
- Te snelle verzoeken die rate limiting activeren.
- Zwakke of inconsistente headers die een script verraden.
- Sessies zonder status terwijl de site cookies of tokens verwacht.
- Selectors gebaseerd op repetitieve klikken die breken zodra de frontend verandert.
De professionele benadering is soberder:
- Vertraag het tempo van de verzoeken.
- Gebruik sessies waar continuïteit nodig is.
- Stel geloofwaardige en consistente headers in.
- Beperk het aantal bezochte pagina's tot de daadwerkelijk benodigde data.
- Geef de voorkeur aan gestructureerde endpoints boven volledige rendering waar mogelijk.
Het heeft geen zin om elke anti-botmaatregel als een technische uitdaging te zien. Als de website duidelijk tegen scraping is, moet je nagaan of de gegevens daadwerkelijk op een duurzame en conforme manier kunnen worden verkregen.
Het bouwen van veerkrachtige scrapers betekent dat je de wrijving met de website vermindert, niet dat je een wedstrijd tegen de verdedigingsmechanismen ervan wint.
Ethisch en legaal scraping met inachtneming van de AVG in Italië
Het meest over het hoofd geziene aspect bij scrapingprojecten is niet de parser. Het is de aansprakelijkheid. In de Italiaanse context weegt dit veel zwaarder wanneer de gegevens betrekking hebben op personen, professionele profielen, cv’s, contactgegevens of informatie afkomstig van vacatureportalen.
Volgens AGID-gegevens uit 2025 hebben verschillende Italiaanse MKB-bedrijven boetes gekregen voor overtredingen met betrekking tot het scrapen van EU-gegevens, met een aanzienlijk aantal sancties in Lombardije en Veneto in 2024-2025. Diezelfde bron meldt dat het scrapen van namen van vacatureportalen strafrechtelijke risico's kan opleveren op grond van art. 167 van D.Lgs 196/03. Deze verwijzing komt voor in de praktische gids van Real Python over web scraping.
Openbaar betekent niet dat er vrij gebruik van mag worden gemaakt
Dit is het eerste misverstand dat we uit de weg moeten ruimen. Het feit dat bepaalde gegevens online zichtbaar zijn, betekent niet dat je ze onbeperkt mag verzamelen, combineren, bewaren en hergebruiken.
Bij serieus werk moeten ten minste vier elementen worden gecontroleerd:
- Robots.txt. Dit is niet het enige juridische criterium, maar geeft wel de oriëntatie van de site aan.
- Servicevoorwaarden. Sommige sites verbieden expliciet geautomatiseerde extractie of hergebruik.
- Aanwezigheid van persoonsgegevens. Namen, e-mails, profielen, identificeerbare recensies, cv's.
- Doel van de verwerking. Je moet weten waarom je verzamelt, hoe lang je bewaart en wie er toegang heeft.
Om je te oriënteren op toestemming, verzameling en compliance, is ook deze verdieping van Electe over cookies en online privacy, EU- versus VS-regelgeving, Google Consent Mode en toestemmingsbeheer nuttig.
Een minimale checklist voor naleving
Als je binnen een bedrijf een scraper moet bouwen, is dit uitgangspunt niet onderhandelbaar:
- Beperk de reikwijdte. Verzamel alleen de velden die nodig zijn voor het aangegeven doel.
- Vermijd niet-essentiële persoonsgegevens. Als ze niet nodig zijn, extraheer ze niet.
- Pseudonimiseer of anonimiseer waar mogelijk al in de pipeline.
- Documenteer de herkomst van de data en de verzamellogica.
- Bepaal bewaartermijnen die aansluiten bij het daadwerkelijke gebruik.
Het gaat hier niet om het worden van een advocaat. Het gaat erom als professional te werken. Een goed geschreven scraper is niet alleen efficiënt. Hij is ook verdedigbaar.
Van idee tot uitvoering met het ELECTE-platform
Veel projecten lopen te vroeg vast. Het team slaagt erin om data te scrapen, een CSV-bestand op te slaan en misschien wekelijks een bestand bij te werken. Maar daar stopt het dan. Zonder opschoning, historische vergelijkingen, rapportage of prognoses blijft de toegevoegde waarde beperkt.
Hoe de overgang van gegevens naar inzichten vormgeven
De relevante passage is deze:
- Data extraheren uit consistente webbronnen.
- Normaliseren van velden, formaten, naamgeving en sleutels.
- Historiseren van de metingen.
- Vergelijken van variaties, uitzonderingen en patronen.
- Analyseren in een omgeving die de data ook voor het bedrijf leesbaar maakt.
Als je in de detailhandel werkt, kan dit betekenen dat je de prijzen en aanbiedingen van concurrenten in de loop van de tijd in de gaten houdt. Op het gebied van financiën of compliance kan het betekenen dat je controles en monitoringlijsten aanvult met openbare bronnen. In de marketing kunnen recensies en redactionele inhoud worden gebruikt voor kwalitatieve classificaties en trendanalyses.
Wanneer de workflow terugkerend wordt, is het verstandig om de scraping te koppelen aan een analysesysteem in plaats van aan een map met lokale bestanden. Voor wie gegevens uit externe bronnen moet integreren in een breder ecosysteem, kan het ook nuttig zijn om te zien hoe Electe de integratie beheert via API's met een geverifieerd Postman-profiel.
Het principe is eenvoudig. Bij scraping wordt ruwe data verzameld. De waarde komt pas tot uiting wanneer die ruwe data in een besluitvormingsproces wordt ingezet.
Belangrijkste punten om te onthouden
- Python is de meest praktische keuze wanneer je een leesbare, uitbreidbare scraper wilt bouwen die aansluit op data-analyse.
- De juiste library hangt af van de site. Requests en BeautifulSoup voor statische HTML. Playwright of Selenium voor dynamische content. Scrapy voor grotere processen.
- Het eerste echte werk is de pagina begrijpen, niet code schrijven.
- Ruwe data is niet genoeg. Ze moeten worden opgeschoond, gevalideerd en opgeslagen in een herbruikbaar formaat.
- AVG, gebruiksvoorwaarden en persoonsgegevens zijn geen bijzaken. Ze maken deel uit van het project.
- Een web scraper with python heeft alleen zin als hij tot betere beslissingen leidt, niet als hij vergeten bestanden oplevert.
Conclusie: Maak gebruik van de kracht van webgegevens
Een goede scraper bouwen betekent dat je weloverwogen keuzes moet maken. Het juiste hulpmiddel voor de juiste website. Stabiele selectiecriteria. Schone output. Een gecontroleerd verzoekstempo. Vanaf het begin aandacht voor de juridische aspecten.
Dit is de reden waarom de web scraper with python een van de nuttigste projecten blijft voor analisten, digitale teams en mkb-bedrijven. Hiermee kun je het web omvormen tot een operationele databron, zonder alleen afhankelijk te zijn van handmatige exports of beperkte integraties.
Het gaat echter niet om het verzamelen van gegevens. Het gaat om het gebruik ervan. Als je de verzamelde gegevens koppelt aan rapporten, trends, waarschuwingen en historische gegevens, is scraping niet langer een technische taak, maar wordt het een concrete ondersteuning bij het nemen van beslissingen.
Je hebt de data al verzameld. De volgende stap is ze omzetten in heldere en bruikbare inzichten. Met Electe, het AI-powered data-analyseplatform voor SMEs, kun je verschillende bronnen koppelen, data sneller voorbereiden en rapporten en analyses krijgen die het bedrijf echt helpen beslissen. Als je van ruwe bestanden naar snellere besluitvorming wilt overstappen, is het de moeite waard om te zien hoe het werkt.

Reacties
Nog geen reacties — start het gesprek.