Meteen naar de inhoud

503 Statuscode: de aartsvijand van de Web Scraper (en hoe deze te verslaan)

  • by
  • Blog
  • 11 min gelezen

Als u enige tijd op internet heeft doorgebracht, bent u ongetwijfeld de gevreesde foutmelding '503 Service Unavailable' tegengekomen. Voor de gemiddelde internetgebruiker is het een kleine ergernis. Maar voor webschrapers kan het een groot obstakel zijn bij het verzamelen van de gegevens die ze nodig hebben.

Volgens gegevens van Pingdom zijn 503-fouten de op een na meest voorkomende 5xx-statuscode, goed voor bijna 25% van alle serverfoutreacties. En uit een onderzoek onder meer dan 1,000 ontwikkelaars zei 38% dat het oplossen van 503-fouten een van de meest frustrerende onderdelen van hun werk was.

Als professionele webschraper kunt u het zich niet veroorloven dat 503-fouten uw projecten laten ontsporen. In deze uitgebreide gids leggen we precies uit wat 503-statuscodes betekenen, wat de oorzaak ervan is en, belangrijker nog, bewezen strategieën om ze te vermijden en te overwinnen. Laten we erin duiken!

Deconstructie van de 503-fout: een overzicht

Voordat we het hebben over het vermijden van 503-fouten, is het belangrijk om te begrijpen wat ze werkelijk betekenen.

Een 503-statuscode is een HTTP-antwoordstatuscode die aangeeft dat de server het verzoek tijdelijk niet kan verwerken. Dit gebeurt meestal omdat de server overbelast is of vanwege onderhoud niet beschikbaar is.

Officieel is de beschrijving voor de 503-statuscode "Service niet beschikbaar". Je ziet dit vaak weergegeven op foutpagina's, samen met berichten als:

  • "De server kan tijdelijk niet aan uw verzoek voldoen vanwege onderhoudsonderbrekingen of capaciteitsproblemen. Probeer het later opnieuw."
  • "De service is niet beschikbaar. Probeer het later opnieuw."
  • "Deze site krijgt meer verkeer dan normaal. Wacht even, we zijn zo terug!"

Een belangrijk ding om op te merken is dat een 503-fout specifiek betekent dat de server zelf correct functioneert, maar om de een of andere reden het huidige verzoek niet kan verwerken. Dit verschilt van andere 5xx-fouten die duiden op een daadwerkelijke serverfout:

StatuscodeNaamOmschrijving
500Internal Server ErrorAlgemene fout die een onverwachte toestand op de server aangeeft
501Niet geïmplementeerdServer ondersteunt de functionaliteit om aan het verzoek te voldoen niet
502Bad GatewayServer die fungeert als proxy/gateway heeft een ongeldig antwoord ontvangen van origin
503Service niet beschikbaarServer is overbelast of offline vanwege onderhoud
504Gateway TimeoutGatewayserver heeft niet op tijd antwoord ontvangen van de oorspronkelijke server

Zoals u kunt zien, vallen 503-fouten in een grijs gebied. De server is niet per se kapot, hij kan op dat moment gewoon niet reageren. Dit is een belangrijk onderscheid waar we later op terugkomen.

De oorzaken van 503-fouten ontleden

Dus wat zorgt er eigenlijk voor dat een server een 503-fout retourneert? Er zijn een paar veelvoorkomende scenario's:

  1. Overbelaste serverbronnen
    Elke server heeft eindige bronnen: CPU, geheugen, schijf-I/O, netwerkbandbreedte, enz. Wanneer het volume aan inkomende verzoeken groter is dan wat deze bronnen aankunnen, kan de server nieuwe verbindingen gaan weigeren om te voorkomen dat deze volledig crasht. Het zal reageren met een 503 om aan te geven dat het momenteel te druk is om aan het verzoek te voldoen.

  2. Gepland onderhoud
    Veel websites hebben periodieke onderhoudsvensters waarin ze updates implementeren, back-ups maken of ander onderhoud uitvoeren. Gedurende deze tijd kan de site geheel of gedeeltelijk niet beschikbaar zijn. Aanvragen mislukken met een 503 totdat het onderhoud is voltooid en de server opnieuw is opgestart.

  3. Beperking van DDoS-aanvallen
    Wanneer een website te maken krijgt met een Distributed Denial of Service (DDoS)-aanval, kunnen er noodlimieten of blokkeringsregels worden ingesteld om het kwaadaardige verkeer af te weren. Dit kan ertoe leiden dat legitieme verzoeken in het kruisvuur terechtkomen en worden afgewezen met 503-fouten.

  4. Firewall-blokken voor webapplicaties
    Veel websites routeren verzoeken via een Web Application Firewall (WAF) om bescherming te bieden tegen veelvoorkomende aanvallen zoals SQL-injectie en cross-site scripting. Als een verzoek er verdacht uitziet, kan de WAF het blokkeren en een 503-fout retourneren.

  5. CAPTCHA's voor anti-botservices
    Sommige websites gebruiken CAPTCHA's en andere challenge-response-tests om bots die zich voordoen als mensen eruit te filteren. Geautomatiseerde webschrapers kunnen hierdoor verstrikt raken, wat resulteert in 503-fouten.

Volgens Imperva's Bad Bot Report 2022 is 27.7% van al het websiteverkeer afkomstig van bots en is 30.2% van dat botverkeer kwaadaardig. Het is geen wonder dat meer sites dan ooit de strijd aangaan, tot ergernis van webschrapers.

Het bepalen van de hoofdoorzaak van UW 503-fouten

Wanneer uw webschraper alleen maar 503-fouten retourneert, raak dan niet in paniek. De eerste stap is het opsporen van de onderliggende oorzaak. Er zijn twee hoofdmogelijkheden:

  1. De website is volledig offline of niet voor iedereen beschikbaar
  2. De website is beschikbaar, maar heeft uw specifieke scraper geblokkeerd

Om erachter te komen met welk scenario u te maken heeft, kunt u in een gewone webbrowser of vanaf een proxy in een andere geografische regio naar de URL bladeren die 503-fouten retourneert. Als u de site normaal kunt bereiken, betekent dit dat de 503-fouten specifiek zijn voor uw scraping-IP-adres.

U kunt ook websitemonitoringtools van derden gebruiken om de algemene status van de site te controleren:

  • DownDetector volgt door gebruikers gerapporteerde problemen voor populaire websites
  • UptimeRobot en Pingdom monitoren een URL vanaf meerdere wereldwijde locaties
  • IsItDownRightNow en CurrentDown bieden snelle statuscontroles

Als een van deze aangeeft dat de website voor iedereen niet beschikbaar is, moet u wachten totdat het probleem is opgelost. Geen enkele hoeveelheid slimme codering kan een website schrapen die volledig offline is.

Maar als de site er goed uitziet voor de rest van de wereld, betekent dit dat u zich moet concentreren op het beter nabootsen van een normale gebruiker.

In de strijd geteste tactieken om 503-fouten te voorkomen

Op dit punt heeft u vastgesteld dat de verzoeken van uw scraper worden uitgekozen en geblokkeerd met 503-fouten. Wat kan je doen? Hier zijn enkele beproefde technieken om uw webschraper weer in de goede gratie van de website te krijgen:

  1. Vertraag je rol
    De belangrijkste reden waarom websites scrapers blokkeren, is omdat ze te snel te veel verzoeken indienen. Het is uiterst verdacht om een ​​site sneller te hameren dan enig mens er doorheen zou kunnen bladeren. Je eerste verdedigingslinie zou moeten zijn om je scrapers zo te smoren dat ze maximaal elke 10-15 seconden één pagina opvragen. Overweeg ook willekeurige vertragingen tussen verzoeken toe te voegen om de timing er organischer uit te laten zien.

  2. Verdeel de lading
    Zelfs met extra vertragingen is het doen van honderden of duizenden verzoeken vanaf één enkel IP-adres in een korte periode nog steeds een enorme waarschuwing. Door de verzoeken te verspreiden over een groep roterende proxy's, lijkt het alsof uw verkeer afkomstig is van veel verschillende legitieme gebruikers op verschillende locaties. Het gebruik van proxy's van verschillende subnetten en zelfs verschillende providers vergroot de camouflage nog verder.

  3. Meng je met de mensen
    Alles aan de verzoeken van uw scraper moet een normale gebruiker met een gewone browser nabootsen. Dat betekent dat u een gemeenschappelijke User-Agent-header moet instellen die overeenkomt met de typische bezoekers van de website. Het betekent ook dat u normale headers zoals Accept-Language en Referer toevoegt. Zorg ervoor dat u een koektrommel instelt om eventuele cookies die door de site worden uitgegeven op te slaan en terug te sturen.

  4. Omzeil veelvoorkomende botvallen
    Vermijd crawlpatronen die uiterst inefficiënt zijn voor een mens, maar vaak voorkomen bij bots, zoals het snel crawlen van elke link op elke pagina. Organiseer in plaats daarvan uw scrapers rond een centrale wachtrij met doelpagina's. Respecteer de robots.txt-regels die goed opgevoede bots vertellen dat ze buiten moeten blijven. En spin niet eindeloos hetzelfde handjevol pagina's steeds opnieuw.

Herstellen van onvermijdelijke 503's

Soms zal uw schraper, zelfs als u alle juiste voorzorgsmaatregelen heeft genomen, nog steeds een 503-foutmelding geven. Misschien kreeg de site een plotselinge toename van legitiem verkeer, of zijn sommige van uw verzoeken per ongeluk via een overbelaste server gerouteerd.

Wanneer een verzoek mislukt, probeer het dan niet meteen opnieuw. Een bombardement aan nieuwe pogingen is een groot botsignaal en zal er waarschijnlijk toe leiden dat uw IP wordt verbannen. Gebruik in plaats daarvan exponentiële uitstel:

  1. Wacht 1 seconde en probeer het opnieuw
  2. Als het opnieuw mislukt, wacht dan 2 seconden en probeer het opnieuw
  3. Als het opnieuw mislukt, wacht dan 4 seconden en probeer het opnieuw
  4. Als het opnieuw mislukt, wacht dan 8 seconden en probeer het opnieuw
  5. En zo verder, tot een maximum van 5 nieuwe pogingen

Hier is een Python-functie die dit implementeert:

import time
import random

def retry_with_exp_backoff(func, max_retries=5):
  for n in range(max_retries):
    try:
      return func()
    except Exception:
      if n == max_retries - 1:
        raise
      sleep_seconds = 2 ** n + random.uniform(0, 1)  
      time.sleep(sleep_seconds)

De willekeurige fractionele vertraging helpt de nieuwe pogingen te spreiden, zodat je niet een stel schrapers hebt die het allemaal op exact dezelfde seconde opnieuw proberen.

Als u na vijf nieuwe pogingen nog steeds 503's ontvangt, kunt u het beste voorlopig verder gaan en het later opnieuw proberen. Misschien ga je een tijdje naar een ander gedeelte van de site, of pauzeer je schraper gewoon helemaal. Je wilt niet te volhardend overkomen.

De nucleaire optie: een browser zonder hoofd gebruiken

Voor websites met bijzonder agressieve anti-botverdediging is de enige manier om 503-fouten te voorkomen soms het volledig stealth-modus gebruiken met een headless browser.

Met tools als Puppeteer en Playwright kun je een echte browser programmatisch besturen. In tegenstelling tot Selenium zijn ze ontworpen om standaard zonder hoofd te werken en hebben ze extra trucs om menselijk gedrag na te bootsen:

  • Het genereren van valse muisbewegingen en klikken
  • Willekeurige weergavegrootte en apparaatparameters
  • Het onderscheppen en wijzigen van verzoeken/antwoorden

Het komt het dichtst in de buurt om uw schraper niet te onderscheiden van een echte gebruiker. Het nadeel is dat het behoorlijk veel middelen vergt in vergelijking met het verzenden van eenvoudige verzoeken. Maar voor bedrijfskritische gegevens op bot-vijandige sites is het de afweging waard.

Ik zou nalaten de potentiële juridische en ethische implicaties van het omzeilen van de bot-tegenmaatregelen van een website niet te onderkennen.

Over het algemeen hebben rechtbanken geoordeeld dat het schrappen van openbaar toegankelijke informatie niet in strijd is met de Computer Fraud and Abuse Act. In de historische zaak HiQ Labs v. LinkedIn uit 2019 oordeelde het Amerikaanse 9th Circuit Court of Appeals dat het schrapen van openbare LinkedIn-profielen geen ‘ongeoorloofde toegang’ was, aangezien die gegevens niet achter een login zaten.

Sommige bedrijven hebben echter met succes claims ingediend wegens inbreuk op het auteursrecht, inbreuk op bezittingen, contractbreuk en andere oorzaken van actie tegen webschrapers. Het omzeilen van technische beperkingen voor toegang tot een site na ontvangst van een lastenbrief is juridisch bijzonder riskant.

Er is ook een argument dat het opzettelijk omzeilen van een 503-foutlimiet om door te gaan met het hameren op een website in strijd is met de sociale normen op internet en de middelen van de site-eigenaar verspilt. Dat het kan betekent niet altijd dat je het ook moet doen.

Als ethische webschraper moet u altijd proberen de robots.txt-regels te volgen, het impliciete contract van de servicevoorwaarden van een site na te leven en te voorkomen dat de servers onnodig worden belast. Soms is het beter om rechtstreeks met site-eigenaren samen te werken om de gegevens die u nodig heeft te verkrijgen via goedgekeurde middelen zoals API's en gegevensdumps.

De toekomst van webscraping versus anti-botverdediging

Het kat-en-muisspel tussen webschrapers en website-exploitanten die ze proberen te blokkeren, vertoont geen tekenen van vertraging.

Nu steeds meer bedrijven de waarde van webdata beseffen, zijn de prikkels om geavanceerde scrapers te bouwen nog nooit zo groot geweest. Tegelijkertijd nemen veel websites strengere anti-botmaatregelen om zichzelf te beschermen tegen kwaadwillende actoren.

Machine learning-modellen worden aan beide kanten gebruikt: door scrapers om menselijke surfpatronen te leren en door websites om botachtige verzoekpatronen te leren. We zullen deze AI-wapenwedloop waarschijnlijk zien oplaaien, waarbij bots mensen proberen na te bootsen en botdetectoren hun vermommingen proberen bloot te leggen.

Het juridische landschap rond webscraping is ook nog steeds in ontwikkeling, met veel open vragen over waar scraping de grens overschrijdt naar ongeautoriseerde toegang. We zullen zeker meer CFAA-uitspraken zien, zoals HiQ Labs v. LinkedIn, die hopelijk meer duidelijkheid zullen bieden aan de webscraping-gemeenschap.

Voorlopig blijft de 503-fout de vloek van het bestaan ​​van veel scrapers. Maar door te begrijpen wat het betekent, door slimme throttling-technieken te gebruiken en enkele trucjes van geniepige bots te lenen, kun je dit overwinnen en de gegevensstroom behouden.

Belangrijke tips voor het vermijden van 503-fouten

We hebben veel aandacht besteed aan deze diepgaande analyse van 503 Service Unavailable-fouten. Dit zijn de belangrijkste punten om te onthouden:

  1. Een 503-fout betekent dat de server van de website naar behoren functioneert, maar op dat moment overbelast is of niet beschikbaar is om uw verzoek te verwerken.

  2. Bepaal altijd of de 503 alleen voor u geschikt is of voor de hele site voordat u een verdere diagnose stelt.

  3. De meest voorkomende oorzaken van 503-fouten zijn te veel te snelle verzoeken, serveronderhoud, DDoS-bescherming, firewallregels voor webapplicaties en anti-bot CAPTCHA's.

  4. Door vertragingen toe te voegen, proxyrotatie te gebruiken, mensachtige verzoekheaders te spoofen en verschillende crawlpatronen te gebruiken, kunt u uw scraper onder de radar houden.

  5. Probeer mislukte verzoeken opnieuw met exponentieel uitstel om tijdelijke 503-berichten af ​​te handelen zonder te botachtig over te komen.

  6. Headless browsers zoals Puppeteer en Playwright vormen de laatste verdedigingslinie tegen de meest geavanceerde anti-botsystemen.

  7. Houd rekening met het potentiële juridische grijze gebied rond het omzeilen van 503-fouten en servicevoorwaarden.

  8. De technologische wapenwedloop tussen webschrapers en anti-botmaatregelen zal alleen maar versnellen.

Door deze aanbevelingen op te volgen en enige terughoudendheid en gezond verstand te betrachten, kunt u de 503-fout overwinnen en de gegevens verkrijgen die u nodig heeft om uw toepassingen aan te sturen. Veel plezier met schrapen!

Doe mee aan het gesprek

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *