De meeste tutorials over "gemini web scraping" lijken geschreven voor precies dezelfde persoon: een Python-ontwikkelaar die al een virtual environment, een Pydantic-schema en een uitgesproken mening over async-bibliotheken heeft. Ben jij dat? Mooi — dan komen we zo bij de code. Maar als je werkt in sales, marketing of ecommerce operations en gewoon gestructureerde data uit een stapel webpagina’s wilt halen zonder eerst te leren wat markdownify doet, dan ben je zeker niet de enige.
Gemini is Googles multimodale AI-familie en groeit razendsnel uit tot een van de standaardengines voor het extraheren van webdata. Uit de Stack Overflow Developer Survey 2025 blijkt dat AI-tools gebruikt of van plan is te gebruiken — en scraping met LLM’s is een groot deel van die trend. Maar er zit een flinke kloof tussen een "toffe demo op één URL" en een pipeline die om kan gaan met paginering, subpagina’s, anti-bot-beveiliging en rommelige HTML op schaal. In deze gids behandelen we zowel de Python-route (code) als de no-code-route, lopen we door modelkeuze met echte tokenberekeningen, pakken we scraping van meerdere pagina’s aan (het onderdeel dat bijna elke andere tutorial overslaat) en zijn we eerlijk over waar Gemini-scraping stukloopt. Aan het eind weet je welke aanpak past bij jouw workflow — en hoe je de valkuilen vermijdt waar zowel ontwikkelaars als zakelijke gebruikers vaak intrappen.
Wat is Gemini-webscraping?
Gemini-webscraping betekent dat je de inhoud van een webpagina — HTML, Markdown of zelfs een screenshot — aan een van Googles Gemini AI-modellen voert. Het model interpreteert de pagina vervolgens en geeft gestructureerde data terug. Geen CSS-selectors. Geen XPath. Geen kwetsbare regels die meteen breken zodra een site zijn layout aanpast.
De kern van de workflow ziet er zo uit:
- Haal de pagina op (met
requests, een headless browser of een Chrome-extensie) - Maak de inhoud schoon en converteer die (meestal HTML → Markdown, om tokenkosten te verlagen)
- Stuur alles naar Gemini met een schema dat de velden beschrijft die je wilt
- Ontvang gestructureerde JSON terug — klaar voor je spreadsheet, CRM of database
Vergelijk dat met traditioneel scrapen met BeautifulSoup of Selenium, waarbij je selectors hard codeert zoals div.product-title > span.price en hoopt dat de site volgende dinsdag niet is verbouwd. Gemini leest een pagina meer zoals een mens dat doet — het begrijpt context, kan omgaan met layoutwijzigingen en verwerkt rommelige opmaak zonder aangepaste regels.
Nog iets om te benadrukken: Gemini is van nature multimodaal. Het verwerkt tekst, afbeeldingen, video, audio, pdf’s en code in één verzoek. Daardoor ontstaan scraping-aanpakken — bijvoorbeeld een screenshot sturen in plaats van HTML — die de meeste andere LLM’s simpelweg niet kunnen evenaren. Daar komen we later op terug.
Waarom Gemini-webscraping belangrijk is voor zakelijke teams
Vraag je je af waarom een marketingmanager of ecommerce-analist zich iets zou moeten aantrekken van LLM’s en webscraping? Kort antwoord: het bespaart enorm veel tijd en het breekt niet elke keer als een website wordt aangepast.
De van ongeveer 1 miljard dollar in 2025 naar meer dan 2 miljard dollar in 2030 — en AI-gedreven extractie is het snelst groeiende segment. Dat is geen hype; het weerspiegelt een echte verschuiving in hoe teams data verzamelen.
Zo past Gemini-scraping in dagelijkse zakelijke workflows:
| Gebruikssituatie | Wat je scrapt | Wie ervan profiteert |
|---|---|---|
| Leadgeneratie | Contactgegevens uit directories, LinkedIn (publiek), bedrijfswebsites | Sales, BDR’s |
| Monitoring van concurrentieprijzen | Productprijzen, voorraadstatus, promoties | Ecommerce, pricingteams |
| Extractie van productcatalogi | Namen, specificaties, afbeeldingen, reviews | Merchandising, marketplace operations |
| Vastgoedvermeldingen | Objectdetails, prijzen, makelaarsinformatie | Makelaars, investeerders |
| Content-aggregatie | Nieuws, blogposts, mentions op social media | Marketing, PR |
| Onderzoek naar de arbeidsmarkt | Functietitels, salarissen, locaties | HR, recruitment |
Het praktische voordeel is tweeledig. Ten eerste hoef je niet steeds opnieuw parsing-scripts te schrijven, testen en debuggen — het model leest de pagina elke keer opnieuw. Ten tweede hoef je geen ontwikkelaar in te huren telkens wanneer een site een <div> verplaatst. De gratis Gemini-laag maakt experimenteren bijna kosteloos voor kleinschalige taken: , zonder creditcard nodig.
Welk Gemini-model moet je kiezen? (Flash Lite vs. Flash vs. Pro)
Niet elk Gemini-model is even geschikt voor scraping. Dit is de praktische vergelijking die ik in elke tutorial had willen zien, omdat de verkeerde keuze je geld kost of gewoon rommelige data oplevert.
De huidige drie Gemini 2.5-modellen delen een context window van 1.048.576 tokens en zijn allemaal multimodaal. De verschillen zitten in prijs, snelheid en hoe goed ze complexe extracties aankunnen.
| Model | Invoerkosten (per 1M tokens) | Uitvoerkosten (per 1M tokens) | Beste voor | Nauwkeurigheid bij complexe schema’s | Snelheid |
|---|---|---|---|---|---|
| Gemini 2.5 Flash Lite | ~$0,025 | ~$0,10 | Simpele, vlakke data, hoge volumes | ⚠️ Moeite met geneste/optionele velden | Snelst |
| Gemini 2.5 Flash | ~$0,075 | ~$0,625 | De meeste scrapingtaken | âś… Goed voor gestructureerde extractie | Snel |
| Gemini 2.5 Pro | ~$0,3125 | ~$2,50 | Complexe geneste schema’s, edge cases | ✅ Beste nauwkeurigheid | Traagst |
(Prijzen volgens de . De Batch API is 50% goedkoper dan deze tarieven.)
Gemini 2.5 Flash Lite: snel en goedkoop, maar let op ontbrekende velden
Flash Lite is de budgetoptie. Ideaal voor eenvoudige, vlakke data — productnamen, prijzen, lijsten met één niveau — op grote schaal. Maar er zijn bekende problemen met optionele velden, tijdstempels en geneste data. Een ontwikkelaar op Googles forum dat Flash Lite “doordraait” zodra schema’s niet-verplichte eigenschappen bevatten, en dan herhalende tekst blijft produceren tot de tokenlimiet is bereikt. Als je schema meer dan twee niveaus nesting heeft, of velden die op sommige pagina’s kunnen ontbreken, dan zal Flash Lite je tokens en je geduld verbranden.
Gemini 2.5 Flash: de ideale middenweg voor de meeste scrapingtaken
Flash is waar ik zou beginnen voor bijna elke serieuze scrapingklus. Het verwerkt gestructureerde extractie goed, kan pagineringslogica aan en kost ongeveer 3× meer dan Flash Lite aan input — maar de winst in nauwkeurigheid is dat waard. Op zit Flash maar een paar punten onder Pro, wat betekent dat het goed omgaat met het afleiden, normaliseren en afvlakken dat scraping in de praktijk vraagt.
Gemini 2.5 Pro: maximale nauwkeurigheid voor complexe data
Pro is het precisiegereedschap. Gebruik dit wanneer je diep geneste schema’s extraheert (denk aan productspecificaties met meerdere variatiegroepen, elk met maten, kleuren en prijzen), of wanneer verzonnen velden niet acceptabel zijn (juridische, financiële of medische data). Het is ongeveer 12× zo duur aan input als Flash Lite, dus bewaar het voor opdrachten waarbij nauwkeurigheid belangrijker is dan prijs.
Voorbeeld van de kosten: 10.000 productpagina’s
Als je HTML eerst preprocesset naar Markdown — wat je echt zou moeten doen, daarover zo meer — zakt een typische productpagina van ongeveer 20.000 tokens ruwe HTML naar ongeveer 4.000 tokens Markdown. De output-JSON is ongeveer 500 tokens per pagina.
| Model | Invoerkosten (40M tokens) | Uitvoerkosten (5M tokens) | Totaal voor 10K pagina’s |
|---|---|---|---|
| Flash Lite | $1,00 | $0,50 | ~$1,50 |
| Flash | $3,00 | $3,13 | ~$6,13 |
| Pro | $12,50 | $12,50 | ~$25,00 |
Zonder Markdown-preprocessing (ruwe HTML van ongeveer 200M tokens input) lopen die bedragen 4–5× op. Preprocessing is de optimalisatie met veruit de grootste impact in de hele pipeline.
Code versus no-code: twee routes naar Gemini-webscraping
Hier splitst de weg zich. Ben je een ontwikkelaar die een maatwerkpipeline bouwt, dan geeft de Python + Gemini API-route je maximale controle. Ben je een zakelijke gebruiker die direct data nodig heeft en geen terminal wil aanraken, dan kom je sneller uit met een no-code AI scraper.
| Criteria | Gemini API (Python) | Thunderbit (No-code) |
|---|---|---|
| Setup-tijd | 15–30 min (omgeving, sleutels, libraries) | < 1 min (Chrome-extensie installeren) |
| Codering nodig | Ja (Python, Pydantic) | Nee |
| Paginering afhandelen | Handmatige scripting | Ingebouwd (klik of infinite scroll) |
| Subpagina-verrijking | Aangepaste code per site | 1-klik "Scrape Subpages" |
| Beheer van tokenkosten | Handmatig (HTML opschonen, modelkeuze) | Afgehandeld door de AI-engine |
| Exportopties | JSON/CSV via script | Excel, Google Sheets, Airtable, Notion |
| Beste voor | Ontwikkelaars die maatwerkpipelines bouwen | Zakelijke gebruikers die nu data nodig hebben |
is de no-code optie die we bij Thunderbit hebben gebouwd — een Chrome-extensie die AI gebruikt (onder de motorkap onder andere Gemini, ChatGPT, Claude en meer) om velden voor te stellen, in twee klikken te scrapen en te exporteren naar het hulpmiddel van jouw keuze. Hieronder loop ik beide routes door.
Voor gebruikers die vooral met spreadsheets werken, is Quadratic een andere optie om te kennen — een AI-spreadsheet waarin je Gemini-gedreven webscraping direct in het sheet zelf kunt uitvoeren. Maar voor workflows die beginnen bij een bekende webpagina (productlijsten, directories, lead-databases) sluit Thunderbit vaak beter aan op het mentale model van de gebruiker.
Stap voor stap: Gemini-webscraping met Python
Deze sectie is voor ontwikkelaars. Wil je de no-code route, sla dit dan over.
Voordat je begint:
- Moeilijkheidsgraad: gemiddeld (Python-kennis vereist)
- Benodigde tijd: ongeveer 20–30 minuten voor de eerste scrape
- Wat je nodig hebt: Python 3.10+, een Google AI Studio-account (gratis), een doel-URL
Stap 1: Stel je Python-omgeving en Gemini API-sleutel in
Maak een projectmap en virtual environment aan en installeer vervolgens de benodigde libraries:
1mkdir gemini-scraper && cd gemini-scraper
2python -m venv venv && source venv/bin/activate
3pip install -U google-genai requests beautifulsoup4 markdownify pydantic
Belangrijk: De enige juiste SDK in 2026 is google-genai. Het oudere pakket google-generativeai bereikte het einde van zijn levensduur op 2025-11-30 en is nu verouderd. Zie je in een tutorial import google.generativeai as genai, dan is die code oud.
Haal daarna je API-sleutel op in . Klik op "Get API Key", maak een nieuwe sleutel aan en sla die op als environment variable:
1export GEMINI_API_KEY="your-key-here"
Je hebt nu een werkende Python-omgeving met alle dependencies geĂŻnstalleerd en je API-sleutel klaar voor gebruik.
Stap 2: Haal de HTML van de doelpagina op
Gebruik requests om de pagina op te halen. Voor dit voorbeeld scrapen we een productpagina:
1import requests
2url = "https://example.com/product/widget-pro"
3response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=30)
4html = response.text
Als de site zware JavaScript-rendering of anti-botbescherming gebruikt, kan requests.get() een lege shell of een 403 teruggeven. We bespreken mitigaties in het deel over beperkingen — maar voor veel publieke sites werkt dit prima.
Stap 3: Maak HTML schoon en converteer naar Markdown
Dit is de stap die de meeste tutorials wel noemen maar zelden kwantificeren. Ruwe HTML van een typische productpagina zit rond de 20.000 tokens. Na het opschonen met BeautifulSoup en conversie naar Markdown kom je uit op ongeveer 765–4.000 tokens — een die echt geld bespaart en hallucinaties vermindert.
1from bs4 import BeautifulSoup
2from markdownify import markdownify
3soup = BeautifulSoup(html, "html.parser")
4main = soup.select_one("main") or soup # pak alleen de contentsectie
5markdown_content = markdownify(str(main))
De aanroep select_one("main") haalt headers, footers, navigatiebalken en scripts weg — allemaal ruis die tokens verspilt en het model verwart. Gebruikt de site geen <main>-tag, probeer dan .product-detail, #content of wat de daadwerkelijke data ook omsluit.
Na deze stap heb je een schone Markdown-string met alleen de betekenisvolle inhoud van de pagina.
Stap 4: Definieer je dataschema en stuur het naar Gemini
Gebruik Pydantic om vast te leggen wat je terug wilt krijgen. De google-genai SDK accepteert een Pydantic BaseModel direct als response_schema:
1from google import genai
2from google.genai import types
3from pydantic import BaseModel
4class Product(BaseModel):
5 name: str
6 price: str
7 sku: str | None = None
8 description: str
9 sizes: list[str] = []
10 colors: list[str] = []
11client = genai.Client() # leest GEMINI_API_KEY uit de omgeving
12response = client.models.generate_content(
13 model="gemini-2.5-flash",
14 contents=f"Extract product details from this page:\n\n{markdown_content}",
15 config=types.GenerateContentConfig(
16 response_mime_type="application/json",
17 response_schema=Product,
18 ),
19)
20product = response.parsed
21print(product)
Een paar valkuilen uit het :
- Gebruik geen
Field(default=...)in schema’s die je naar Gemini stuurt — de API geeft dan eenValueError. Gebruik in plaats daarvansku: str | None = Noneop type-niveau. - Houd nesting oppervlakkig (maximaal 3 niveaus). Diep geneste schema’s zorgen ervoor dat Flash en Flash Lite recursieve output of onafgesloten haakjes produceren.
- Markeer velden als vereist wanneer je Flash Lite gebruikt, en gebruik lege sentinel-strings in plaats van weglating — de omgang van Flash Lite met optionele velden is .
Je zou nu een geparste Product-object moeten hebben met gestructureerde data van de pagina.
Stap 5: Exporteer en sla je gescrapete data op
Sla het resultaat op als JSON of CSV:
1import json
2with open("products.json", "w") as f:
3 json.dump(product.model_dump(), f, indent=2)
Voor doorvoer naar Google Sheets kun je de gspread-bibliotheek gebruiken. Voor databases serialiseer je naar de ORM van jouw keuze. De gestructureerde output van Gemini is schoon genoeg om direct in de meeste downstream-tools te gebruiken.
Stap voor stap: Gemini-webscraping zonder code (met Thunderbit)
Dit is de route voor zakelijke gebruikers — of voor ontwikkelaars die liever geen tijdelijke scraping-scripts schrijven.
Voordat je begint:
- Moeilijkheidsgraad: beginner
- Benodigde tijd: ongeveer 5 minuten voor de eerste scrape
- Wat je nodig hebt: Chrome-browser, (de gratis laag werkt)
Stap 1: Installeer de Thunderbit Chrome-extensie
Ga naar de en klik op "Add to Chrome." Meld je aan met je e-mail — het hele proces duurt minder dan een minuut. Vergelijk dat eens met de Python-setup van 15–30 minuten hierboven.
Stap 2: Open je doelpagina en klik op "AI Suggest Fields"
Navigeer naar de website die je wilt scrapen — een productoverzicht, een vastgoedgids, een lead-database, wat dan ook. Klik op het Thunderbit-icoon in je browserwerkbalk en kies "AI Suggest Fields."
De AI van Thunderbit leest de pagina en stelt automatisch kolomnamen en datatypes voor — dingen als "Product Name", "Price", "Rating", "Image URL". Je kunt kolomnamen aanpassen, velden verwijderen die je niet nodig hebt, of per kolom eigen AI-prompts toevoegen (bijvoorbeeld "classificeer als High/Medium/Low" of "vertaal naar Engels").
Je ziet eerst een tabelvoorbeeld met de ingestelde kolommen, nog voordat er één rij is gescrapet.
Stap 3: Klik op "Scrape" en controleer de resultaten
Eén klik. Thunderbit handelt paginering af — zowel klikgebaseerde "Next"-knoppen als infinite scroll — en zet de data om in een gestructureerde tabel. Je kunt kiezen tussen:
- Cloud Scraping: sneller, verwerkt tot 50 pagina’s tegelijkertijd. Werkt op publieke sites.
- Browser Scraping: draait in je ingelogde browsertab. Gebruik dit voor sites die authenticatie vereisen (CRM’s, afgeschermde directories, interne tools).
De resultaten verschijnen direct in een tabel in de zijbalk van de extensie. Controleer op duidelijke fouten voordat je exporteert.
Stap 4: Exporteer naar Excel, Google Sheets, Airtable of Notion
Klik op de exportknop en kies je formaat. Thunderbit exporteert naar Excel, Google Sheets, Airtable en Notion — gratis, zonder betaalmuur. Afbeeldingsvelden worden rechtstreeks geüpload naar de afbeeldingsbibliotheken van Notion en Airtable, wat handig is als je productfoto’s of profielfoto’s scrapt.
Geen JSON-parsing. Geen scripting. De data is meteen bruikbaar.
Scrapen van meerdere pagina’s en subpagina’s met Gemini
De meeste tutorials stoppen stiekem na één URL. Echte scrapingopdrachten doen dat niet.
500 productpagina’s scrapen met paginering en detail-subpagina’s is een serieuze klus — en het verschil tussen een demo op één URL en die werkelijkheid is enorm.
Paginering afhandelen met de Gemini API (code-aanpak)
Voor URL’s met paginanummers (het meest voorkomende patroon) loop je door de pagina’s totdat je een leeg resultaat krijgt:
1import time
2all_products = []
3for page in range(1, 101): # tot 100 pagina’s
4 url = f"https://example.com/products?page={page}"
5 md = fetch_clean(url) # jouw HTML→Markdown-functie van eerder
6 response = client.models.generate_content(
7 model="gemini-2.5-flash-lite", # goedkoop voor overzichtspagina’s
8 contents=f"Extract product names and URLs:\n\n{md}",
9 config=types.GenerateContentConfig(
10 response_mime_type="application/json",
11 response_schema=list[ListingItem],
12 ),
13 )
14 items = response.parsed
15 if not items:
16 break
17 all_products.extend(items)
18 time.sleep(4) # respecteer de limieten van de gratis laag
Voor cursor-gebaseerde sites of infinite scroll moet je het XHR-eindpunt onderscheppen dat de front-end aanroept (check het Network-tabblad in je browser) en dat eindpunt direct in een loop gebruiken. Dat is goedkoper dan telkens opnieuw renderen, en je stuurt alleen items door naar Gemini als er LLM-cleaning nodig is.
Let hier goed op je tokenkosten — elke pagina vermenigvuldigt de rekening. Gebruik Flash Lite voor simpele overzichtspagina’s en schakel pas over naar Flash voor detail-extractie.
Subpagina’s scrapen voor rijkere data (code-aanpak)
Het klassieke tweestapsmodel: stap 1 haalt URL’s uit een overzichtspagina, stap 2 bezoekt elke detailpagina voor uitgebreidere data.
1# Stap 1: verzamel URL’s met goedkope Flash Lite
2class Listing(BaseModel):
3 product_urls: list[str]
4listing = client.models.generate_content(
5 model="gemini-2.5-flash-lite",
6 contents=f"Extract product URLs:\n{listing_md}",
7 config=types.GenerateContentConfig(
8 response_mime_type="application/json",
9 response_schema=Listing,
10 ),
11).parsed
12# Stap 2: haal details op met Flash
13class ProductDetail(BaseModel):
14 name: str
15 price: str
16 specs: dict[str, str]
17 reviews: list[str]
18for url in listing.product_urls:
19 md = fetch_clean(url)
20 detail = client.models.generate_content(
21 model="gemini-2.5-flash",
22 contents=f"Extract product detail:\n{md}",
23 config=types.GenerateContentConfig(
24 response_mime_type="application/json",
25 response_schema=ProductDetail,
26 ),
27 ).parsed
28 # sla detail op...
29 time.sleep(0.5)
Dit werkt, maar het vraagt wel veel infrastructuur: URL-deduplicatie, foutafhandeling, rate limiting, retry-logica, cache van ruwe HTML zodat schema-aanpassingen niet opnieuw hoeven te fetchen. Voor 50 pagina’s is het nog te doen. Voor 5.000 bouw je al snel infrastructuur.
Het no-code alternatief: Thunderbit’s ingebouwde paginering en subpagescraping
Thunderbit handelt zowel klikgebaseerde als infinite-scroll-paginering automatisch af — zonder dat je loops hoeft te schrijven. Voor subpagina-verrijking bezoekt de functie "Scrape Subpages" elke detailpagina die vanaf je overzicht wordt gelinkt en verrijkt de oorspronkelijke tabel met diepere velden. Eén klik in plaats van één script.
De cloud scraping-modus verwerkt tot 50 pagina’s tegelijk, wat echt verschil maakt wanneer je op schaal een productcatalogus of vastgoedgids scrapt. Voor iedereen die geen zin heeft in Python-loops en retry-logica is dit de praktische keuze. (Voor meer over hebben we een aparte uitleg.)
Screenshot-scraping: Gemini’s multimodale shortcut
Hier is een aanpak die de meeste tutorials helemaal overslaan: een screenshot van een webpagina sturen naar Gemini’s vision API in plaats van ruwe HTML. Een ontwikkelaar dat één screenshot slechts ongeveer 258 tokens kost — tegenover duizenden tokens voor zelfs opgeschoonde Markdown. Voor simpele extracties is dat een enorm prijsverschil.
Hoe je Gemini’s Vision API gebruikt voor webscraping
Maak een screenshot met Playwright, encodeer die en stuur hem naar Gemini:
1from playwright.sync_api import sync_playwright
2from google import genai
3from google.genai import types
4from pydantic import BaseModel
5class Product(BaseModel):
6 title: str
7 price: str
8with sync_playwright() as p:
9 page = p.chromium.launch().new_page()
10 page.goto("https://example.com/product/widget-pro")
11 page.wait_for_load_state("networkidle")
12 png_bytes = page.screenshot(full_page=False) # alleen boven de vouw
13client = genai.Client()
14resp = client.models.generate_content(
15 model="gemini-2.5-flash",
16 contents=[
17 {"inline_data": {"mime_type": "image/png", "data": png_bytes}},
18 "Extract the product title and price as JSON.",
19 ],
20 config=types.GenerateContentConfig(
21 response_mime_type="application/json",
22 response_schema=Product,
23 ),
24)
25print(resp.parsed)
Volgens Google’s kost een afbeelding waarvan beide afmetingen ≤ 384 pixels zijn 258 tokens. Grotere afbeeldingen worden opgedeeld in 768×768-blokken van telkens 258 tokens. Een korte screenshot boven de vouw (258–1.600 tokens) is duidelijk goedkoper dan ruwe HTML — maar een zeer hoge full-page screenshot (~5.000 tokens) kan juist duurder uitvallen dan schone Markdown (~765–1.200 tokens).
Beperkingen van screenshot-scraping
- Lagere precisie bij dichte tabellen: lay-outs met meerdere kolommen, kleine lettertypes en overlappende elementen leiden tot gedeeltelijke uitlezing — niet zozeer hallucinaties, maar gemiste labels en verkeerd uitgelijnde koppen.
- Kan geen links volgen: vision geeft tekst terug, geen klikbare anchors. Geen paginering, geen subpagina-verrijking.
- Resolutieplafond: tekst kleiner dan ongeveer 10 px wordt vaak fout gelezen. Google schaalt af naar ongeveer 1.568 px op de langste zijde.
- Capture-overhead: Playwright opstarten + wachten op
networkidlekost 2–5 seconden per pagina, en dat tikt op schaal flink aan.
Screenshot-scraping blinkt uit bij JS-zware pagina’s, bot-geblokkeerde sites (waar requests.get() een 403 oplevert maar een browser de pagina wel rendert) en pagina’s met data in grafieken of afbeeldingen. Voor lange, tekstgedreven pagina’s blijft Markdown de betere keuze.
Thunderbit’s image- en PDF-scraping gebruikt een vergelijkbare AI-vision-aanpak — je sleept een afbeelding of pdf erin en krijgt een gestructureerde tabel terug, zonder screenshot-scripting of base64-gedoe. (Zie ook: .)
Wanneer Gemini-webscraping faalt (en wat je dan beter kunt doen)
Gemini is een extractie-engine, geen fetch-engine. Als je de pagina-inhoud niet bij Gemini krijgt, kan het je niet helpen. Punt.
Er zijn meerdere veelvoorkomende scenario’s waarin de hele aanpak vastloopt, en de meeste tutorials behandelen die als bijzaak. Ik ben daar liever direct over.
| Beperking | Wat gebeurt er | Mitigatie |
|---|---|---|
| Anti-bot / Cloudflare | API-verzoeken worden geblokkeerd; requests.get() geeft 403 of een challenge-pagina terug | Gebruik proxies met TLS-fingerprintrotatie, of browsergebaseerde tools (Thunderbit’s browser scraping gebruikt je ingelogde sessie) |
| Tokenlimieten van het context window | Grote pagina’s overschrijden bruikbare context (~200K–300K voor betrouwbare extractie, ook al wordt 1M technisch ondersteund) | HTML→Markdown opschonen, pagina’s opsplitsen of screenshots gebruiken |
| Hallucinatie op visuele content | Gemini gokt op basis van alt-tekst of bijschriften in plaats van de echte afbeelding | Valideer output; gebruik de vision API expliciet voor beelddata; voeg grounding-validators toe |
| API-rate-limits | Wordt op schaal afgeremd — de gratis laag is ongeveer 100 RPD op Pro, 1.000 RPD op Flash Lite | Queue-management, batchverwerking (50% korting), of overstappen op kant-en-klare tools |
| Inconsistente extractie (Lite-modellen) | Optionele velden, tijdstempels en geneste data worden gemist of verzonnen | Upgrade naar Flash/Pro, of voeg expliciete schema-constraints toe |
| Beschermde sites (LinkedIn, enz.) | Geeft fouten of lege data terug | Browsergebaseerd scrapen met actieve sessie (Thunderbit ondersteunt dit); respecteer de voorwaarden |
Een paar van deze verdienen extra context.
Anti-bot is tegenwoordig actief LLM-bewust. Cloudflare sinds juli 2025, met in de eerste vijf maanden 416 miljard geblokkeerde AI-botverzoeken. Datadome voegde in 2025 LLM-specifieke detectie toe en zag het LLM-botverkeer verviervoudigen. Een simpele requests.get() + Gemini is tegen Datadome-beveiligde sites praktisch kansloos. Het probleem zit in de fingerprint, niet in het IP — alleen IP’s roteren helpt niet als de TLS-fingerprint schreeuwt: "Python requests."
Hallucinatie is subtiel. LLM’s die zijn getraind om behulpzaam te zijn, vullen optionele velden liever met plausibele verzinsels dan dat ze null teruggeven. Ik heb modellen een productmerk zien afleiden uit de URL-slug, de valuta zien raden op basis van de TLD en ogenschijnlijk geloofwaardige maar verzonnen reviewaantallen zien invullen uit skeleton loaders. De mitigatiestapel: strikte Pydantic-schema’s, retry-lussen met validatiefeedback, grounding-validators die controleren of geëxtraheerde waarden echt in de bron-HTML voorkomen, en (Flash extraheert, Pro valideert een steekproef).
Het context window van 1M is niet echt bruikbaar op 1M. en anderen laat zien dat de redeneerkwaliteit al afneemt lang voordat de tokenlimiet is bereikt. Zie ongeveer 200K–300K tokens als het praktische plafond voor gestructureerde extractie.
Beslisboom: welk hulpmiddel moet je gebruiken?
- Laag volume + simpele pagina’s + ontwikkelaar → Gemini API gratis laag + Python
- Middelgroot volume + complexe schema’s + ontwikkelaar → betaalde Gemini 2.5 Flash + Python + gestructureerde output + preprocessing
- Elk volume + niet-ontwikkelaar + login-muren of zware paginering →
- Zeer hoog volume + zware anti-bot + bedrijfskritisch → beheerde scraping-infrastructuur (proxyservices) + Gemini als extractielaag
Gemini-webscraping: tips om tijd en geld te besparen
Of je nu Python schrijft of op knoppen klikt, deze tips besparen je een hoop gedoe.
- Preprocess HTML altijd naar Markdown voordat je het naar Gemini stuurt. is normaal; 95% is haalbaar als je ook met BeautifulSoup vooraf wegknipt.
- Gebruik alleen
google-genai. Gebruik niet het verouderde pakketgoogle-generativeai— dat is EOL. - Begin alleen met Flash Lite voor platte schema’s. Schakel over op Flash zodra nesting of optionele velden opduiken.
- Vermijd
Field(default=...)in Pydantic-schema’s die je naar Gemini stuurt. Gebruik op type-niveausku: str | None = None. - Pydantic +
response_schemais essentieel — het is zowel een contract als een vangrail tegen hallucinaties. - Gebruik de voor jobs boven 1.000 pagina’s — 50% korting en telt niet mee voor realtime RPM.
- Controleer een willekeurige steekproef van 10–50 rijen handmatig voordat je een nieuwe extractor opschaalt. Nauwkeurigheidsdrift zie je pas als je kijkt.
- Cache ruwe HTML op schijf — schema-aanpassingen zouden het opnieuw ophalen niet opnieuw moeten triggeren.
- Bewaar de bron-URL op elke rij zodat je individuele pagina’s opnieuw kunt crawlen zonder de hele job opnieuw te draaien.
- Voor no-code gebruikers: gebruik per kolom eigen AI-prompts in Thunderbit om prompt engineering naar spreadsheetniveau te verplaatsen — vertaal, categoriseer, vat samen op kolomniveau.
Nog één: zet de gratis laag niet in productie. In december 2025 werden de limieten met 50–80% verlaagd en die kunnen zonder waarschuwing opnieuw worden aangepast.
Afsluiting
De afstand tussen een Gemini-demo op één URL en een productieklare pipeline is groter dan de meeste tutorials laten zien.
De route met Python + Gemini API geeft ontwikkelaars volledige controle over modelkeuze, preprocessing, paginering en schema-ontwerp. De no-code route — tools zoals — geeft zakelijke gebruikers dezelfde gestructureerde data-extractie zonder een terminal aan te raken.
Dit zou ik eruit meenemen:
- Modelkeuze doet ertoe. Flash Lite voor volume, Flash voor balans, Pro voor complexiteit. Kies niet automatisch de goedkoopste optie en verbaas je dan over verkeerde data.
- Scraping van meerdere pagina’s en subpagina’s is waar tutorials tekortschieten — en waar het echte werk gebeurt. Beide routes hier vullen dat gat.
- Eerlijke beperkingen besparen tijd. Als een site API-verzoeken blokkeert, helpt geen enkele prompt-engineering. Kies het juiste gereedschap voor de klus, niet het meest indrukwekkende.
- HTML preprocessen naar Markdown is de optimalisatie met de hoogste impact — het verlaagt kosten met meer dan 75% en vermindert hallucinaties.
Wil je de no-code route proberen? Dan kun je met een handvol pagina’s scrapen en zelf de resultaten zien. Geef je de voorkeur aan code, dan is de gratis Gemini-API-laag ruim genoeg om in een middag een pipeline te prototypen. Hoe dan ook heb je sneller gestructureerde data dan met eindeloos kopiëren en plakken ooit mogelijk was. Voor meer over of hebben we die onderwerpen uitgebreid behandeld op onze blog.
Veelgestelde vragen
Hoeveel kost het om Gemini te gebruiken voor webscraping?
De Gemini API heeft een gratis laag met ongeveer 100 verzoeken per dag op Pro, 500 per dag op Flash en 1.000 per dag op Flash Lite (begin 2026 — deze limieten werden in december 2025 verlaagd). Op de betaalde laag kost het scrapen van 10.000 productpagina’s ongeveer $1,50 met Flash Lite, $6 met Flash of $25 met Pro — ervan uitgaande dat je HTML eerst naar Markdown preprocesset. Zonder preprocessing lopen de kosten 4–5× op. De Batch API biedt 50% korting voor niet-realtime jobs.
Kan Gemini websites scrapen waarvoor je moet inloggen?
De Gemini API alleen kan niet inloggen op websites — het verwerkt alleen de inhoud die jij aanlevert. Je moet de HTML zelf ophalen met je eigen geauthenticeerde sessie (bijvoorbeeld met een headless browser en opgeslagen cookies). Thunderbit’s Browser Scraping-modus doet dit standaard: het draait in je ingelogde Chrome-tab, dus elke site die jij in je browser kunt zien, kan Thunderbit scrapen.
Is Gemini-webscraping legaal?
De legaliteit hangt af van de gebruiksvoorwaarden van de website, het type data en jouw jurisdictie. In de VS wordt na hiQ v. LinkedIn en Meta v. Bright Data het scrapen van publiek toegankelijke data zonder inloggen over het algemeen als toegestaan gezien — maar elk geval is anders. Scrapen achter een login brengt meer juridisch risico met zich mee. Persoonsgegevens van EU-burgers vallen onder de GDPR, ongeacht of de site publiek is. Respecteer altijd robots.txt en de gebruiksvoorwaarden, en scrape geen persoonsgegevens zonder geldige grondslag.
Kan ik Gemini gebruiken om dynamische, JavaScript-zware sites te scrapen?
Ja, maar je moet eerst de JavaScript renderen — bijvoorbeeld met een headless browser (Playwright, Puppeteer) of door de API-eindpunten van de site rechtstreeks te onderscheppen. Zodra je de gerenderde HTML hebt, maak je die schoon en stuur je die zoals gewoonlijk naar Gemini. Alternatief kun je met Gemini’s vision API screenshot-scraping gebruiken om JS-rendering helemaal te omzeilen — als het in een browser rendert, kan Gemini het zien. Thunderbit verwerkt JS-gerenderde pagina’s automatisch in zowel Cloud- als Browser-scraping-modus.
Wat is het verschil tussen Gemini gebruiken voor scraping en een gespecialiseerde scrapingtool zoals Thunderbit?
Gemini is een extractie-engine — het interpreteert inhoud en geeft gestructureerde data terug. Het bezoekt geen websites, regelt geen paginering, beheert geen authenticatie en exporteert niet vanzelf naar spreadsheets. Je hebt dus nog steeds iets nodig om de pagina-inhoud bij Gemini te krijgen en iets om met de output nuttige dingen te doen. Gespecialiseerde tools zoals combineren ophalen, renderen, AI-extractie, paginering, subpagina-verrijking en export in één pakket — zonder losse plumbing.
Meer lezen