Een door Cloudflare beschermde site scrapen (gids 2026)
Cloudflare staat voor een groot deel van het publieke web, dus een scraper die bij de ene site werkt, loopt bij de volgende vaak tegen een muur aan. Je merkt het meestal aan een HTTP 403 of 503, een interstitial met "Just a moment...", of een Turnstile-vinkje op de pagina. Deze gids legt uit wat Cloudflare controleert, welke oplossingen werken zonder aan dingen te komen die je niet moet aanraken, en waar captchaoplossing past. Het korte antwoord: controleer of je de site mag scrapen, vertraag, stuur requests die op een gewone client lijken, gebruik een echte browser wanneer de pagina JavaScript nodig heeft, en pak pas dan een captcha aan. Turnstile is de captcha die Cloudflare het vaakst gebruikt. Ondersteuning van Turnstile bij Scarnox is binnenkort beschikbaar. Het captchatype dat vandaag live is, is PopularCaptcha.
Wat Cloudflare controleert
Cloudflare beoordeelt elk request op verschillende signalen:
- IP-reputatie. Adressen uit clouddatacenters beginnen met een lagere score dan adressen van thuisverbindingen.
- Aanvraagfrequentie en patroon. Honderden requests per seconde vanaf één adres lijken op een bot, wat de headers ook zeggen.
- Headers en TLS-vingerafdruk. Een kale HTTP-bibliotheek stuurt vaak headers, een headervolgorde en een TLS-handshake die geen gangbare browser stuurt.
- JavaScript-uitvoering. De uitdagingspagina draait scripts en controleert of er een echte browseromgeving aanwezig is.
- Cookies. Nadat een uitdaging is doorstaan, geeft Cloudflare een clearance-cookie uit die aan die sessie is gebonden.
Een hoge score gaat ongemerkt door. Een middelmatige score krijgt een interactieve uitdaging. Een lage score krijgt een blokkade. Het meeste werk gaat over het verhogen van je score door je als een nette client te gedragen, niet door de controle te bestrijden.
Stap 1: controleer of je de site mag scrapen
Lees voordat je technisch aan de slag gaat het robots.txt-bestand en de gebruiksvoorwaarden van de site. Een blokkade is vaak de eigenaar die je iets duidelijk maakt. Openbare pagina's langzaam en voor een duidelijk doel scrapen is één ding. Met geweld voorbij een blokkade gaan om bij gegevens te komen die de eigenaar heeft afgeschermd, is iets anders, en dat gebruik ondersteunt Scarnox niet. De juridische samenvatting behandelt de algemene vragen.
Stap 2: maak het gewone verzoek goed
Veel scrapers die "geblokkeerd" lijken, sturen simpelweg slechte requests. Los deze eerst op:
- Stuur een actuele User-Agent en de headers die een browser zou sturen, zoals
AcceptenAccept-Language. - Houd één sessieobject aan, zodat cookies tussen requests blijven bestaan, zoals bij een browser.
- Voeg een vertraging tussen requests toe, met een beetje willekeurige jitter.
- Trek je terug bij
429- en503-antwoorden in plaats van in een strakke lus opnieuw te proberen.
import random
import time
import requests
session = requests.Session()
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/124.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
})
def polite_get(url: str, attempts: int = 4) -> requests.Response:
r = None
for attempt in range(attempts):
r = session.get(url, timeout=30)
if r.status_code not in (429, 503):
return r
# Exponentiële backoff met jitter: ongeveer 1, 2, 4 seconden plus ruis.
time.sleep(2 ** attempt + random.uniform(0, 1))
return r
Als dit je erdoorheen helpt, ben je klaar. Houd de vertraging erin.
Stap 3: bepaal met welke uitdaging je te maken hebt
Het antwoord vertelt je veel:
- Een pagina met "Just a moment...". Dit is een JavaScript-uitdaging. Een echte browser haalt die meestal zelf na een paar seconden. De clearance-cookie kan daarna opnieuw worden gebruikt voor latere requests in dezelfde sessie.
- Een Turnstile-widget op een formulier of pagina. Dit is een captcha. Er is een token van de widget nodig voordat het formulier een verzending accepteert.
- Een blokkadepagina met een foutcode. Het adres of het request is zonder pardon geweigerd. Je pacing aanpassen en je requests repareren helpt meestal meer dan al het andere. Oplossen maakt een harde blokkade niet tot data.
Controleren welke van deze je ziet, bespaart veel nutteloos werk.
Stap 4: gebruik een echte browser wanneer de pagina dat nodig heeft
Als de pagina pas inhoud toont nadat JavaScript draait, zal een gewone HTTP-client die nooit zien. Stuur dan een volledige browser aan met Playwright of Selenium. Een headless browser is detecteerbaar, dus lees headless browserdetectie voordat je erop vertrouwt, en zet hem zo dat hij past bij de omgeving van een echte bezoeker. De gids over JavaScript-sites laat een volledig voorbeeld zien.
Stap 5: kijk naar je IP-reputatie
Adressen uit clouddatacenters zijn de meest voorkomende reden waarom een schoon request een lage score krijgt. Residentiële adressen scoren meestal beter, tegen een hogere prijs in snelheid en geld. De afweging wordt behandeld in residentiële versus datacenter-proxies.
Roteren heeft zijn eigen valkuilen. Het adres bij elk request wijzigen oogt onnatuurlijk, want een echte bezoeker houdt één adres voor een heel bezoek. Vaste sessies, waarbij één adres wordt vastgehouden voor een reeks verwante requests, doen het vaak beter dan snelle rotatie. Roterende proxies voor scraping gaat dieper in op de details.
Stap 6: waar captchaoplossing past
Soms verschijnt de widget wel, op een formulier dat je test of op een pagina waarvoor je toestemming hebt om te automatiseren. Een Turnstile-token is dan een verplichte stap in die flow. Ondersteuning van Turnstile bij Scarnox komt binnenkort beschikbaar, dus bouw nog geen productiecode erop. Het live captchatype vandaag is PopularCaptcha, dat een andere widget gebruikt.
De algemene workflow voor elk tokengebaseerd captcha is hetzelfde. Je leest de sitekey van de pagina, vraagt een token aan en plaatst het token in het formulierveld dat de site verwacht. Tokens zijn kortlevend, dus dien ze meteen in. De PopularCaptcha-gids voor Python laat die workflow van begin tot eind zien, en captchatypen uitgelegd vergelijkt de widgets die je tegenkomt.
Wil je klaar zijn wanneer de Turnstile-ondersteuning live gaat, dan kun je nu al een gratis proefversie starten. Begin met gratis proefkrediet, zonder creditcard: maak een account aan. Voor de actuele tarieven van het live captchatype zie de prijspagina.
Scrape verantwoord
- Lees
robots.txten respecteer de voorwaarden van de site die je scrapet. - Beperk de snelheid van je crawler, en draai hem waar mogelijk buiten de piekuren.
- Cache responses zodat je nooit dezelfde pagina zonder reden twee keer ophaalt.
- Vermijd het verzamelen van persoonsgegevens tenzij je daar een rechtmatige grondslag voor hebt.
- Als een site de toegang heeft beperkt, stop dan. Probeer de beperking niet te omzeilen.