Meteen naar de inhoud

403 Verboden: de vloek van webschrapers (en hoe u dit kunt vermijden)

  • by
  • Blog
  • 8 min gelezen

Als je ooit hebt geprobeerd gegevens van websites te verzamelen, ben je vrijwel zeker ooit de gevreesde '403 Forbidden'-fout tegengekomen. Deze HTTP-statuscode geeft aan dat de server uw verzoek heeft begrepen, maar weigert hieraan te voldoen. Met andere woorden, u heeft geen toestemming om toegang te krijgen tot de door u aangevraagde bron.

Voor webschrapers zijn 403-fouten een constante hoofdpijn. Websites gebruiken ze om ongeautoriseerde toegang tot pagina's te voorkomen en om verkeer te blokkeren dat afkomstig lijkt te zijn van bots of scrapers in plaats van menselijke gebruikers. Als u een 403-reactie krijgt, kan uw webscrapingproject tot stilstand komen.

Maar wanhoop niet! Hoewel 403-fouten frustrerend kunnen zijn, zijn ze niet onoverkomelijk. Met de juiste technieken is het mogelijk om het activeren van 403's te voorkomen en uw webschraper soepel te laten werken. In deze handleiding duiken we in de oorzaken van 403-fouten en onderzoeken we strategieën om deze te voorkomen. Laten we beginnen!

Waarom webscrapers 403-fouten tegenkomen

Er zijn een paar belangrijke redenen waarom een ​​webschraper een 403 verboden reactie van een website kan ontvangen:

  1. Een beperkte bron aanvragen: Sommige pagina's zijn eenvoudigweg niet toegankelijk voor ongeautoriseerde gebruikers. Als u bijvoorbeeld probeert toegang te krijgen tot een pagina waarvoor u moet inloggen, zoals een gebruikersdashboard, resulteert dit vaak in een 403-fout als u geen geldige sessie heeft.

  2. Ontbrekende authenticatie: Veel websites vereisen een vorm van authenticatie, zoals inloggen met een gebruikersnaam en wachtwoord, om toegang te krijgen tot bepaalde pagina's. Als uw webschraper niet de benodigde authenticatiegegevens verstrekt, krijgt deze waarschijnlijk een 403-antwoord.

  3. Bot-detectie: Websites maken vaak gebruik van verschillende technieken om verkeer dat afkomstig lijkt te zijn van bots of scrapers, te detecteren en te blokkeren. Als een site denkt dat uw webschraper een geautomatiseerde tool is en geen menselijke gebruiker, kan deze reageren met een 403-fout.

  4. Anti-botsystemen: Sommige websites gebruiken speciale anti-botoplossingen zoals Cloudflare, Imperva of PerimeterX om te beschermen tegen scraping en andere geautomatiseerde bedreigingen. Deze systemen analyseren verkeerspatronen en blokkeren verzoeken die verdacht lijken, waarbij vaak 403-fouten worden geretourneerd.

Om websites succesvol te kunnen schrapen, hebben we manieren nodig om deze problemen te vermijden en sites ervan te overtuigen dat onze webschraper een legitieme, geautoriseerde gebruiker is. Gelukkig zijn er verschillende benaderingen die we kunnen volgen. Laten we eens kijken naar enkele van de meest effectieve tactieken.

Authenticatie bieden

Als een website moet inloggen om toegang te krijgen tot de inhoud die u wilt schrapen, moet u authenticatie opnemen in uw webschrapproces. Dit omvat doorgaans twee stappen:

  1. Het inlogproces inspecteren: Gebruik de ontwikkelaarstools van uw browser om het netwerkverkeer te observeren wanneer u handmatig op de site inlogt. Zoek naar het verzoek dat de inloggegevens indient en noteer de URL, de verzoekmethode, de headers en de hoofdtekst van het verzoek. U moet dit verzoek repliceren in uw webschraper.

  2. Programmatisch inloggen: Gebruik een bibliotheek zoals Python's Requests of Node.js's Axios om een ​​inlogverzoek te verzenden dat lijkt op het verzoek dat u hebt waargenomen. Leg alle cookies vast die de site retourneert, omdat deze vaak sessietokens bevatten die nodig zijn om volgende verzoeken te verifiëren. Neem deze cookies op in de headers van uw webscraping-verzoeken om een ​​geldige inlogsessie te behouden.

Hier is een voorbeeld van programmatisch inloggen op een site met behulp van Python en Requests:

import requests

# Start a new session
session = requests.Session() 

# Send a POST request to the login URL with the necessary credentials
login_data = {
    ‘username‘: ‘my_username‘,
    ‘password‘: ‘my_password‘,
}
response = session.post(‘https://example.com/login‘, data=login_data)

# The session now contains the cookies needed to authenticate future requests
response = session.get(‘https://example.com/restricted_page‘)

Door uw webschraper te authenticeren en de nodige cookies en headers in uw verzoeken op te nemen, kunt u 403-fouten voorkomen die worden veroorzaakt door ontbrekende machtigingen.

Stealth-technieken

Uiteraard is inloggen niet altijd voldoende. Websites zijn verwikkeld in een voortdurend kat-en-muisspel met webschrapers, op zoek naar signalen die bots onderscheiden van menselijke gebruikers. Om te voorkomen dat ze geblokkeerd raken, moeten webschrapers zich aanpassen door menselijk gedrag zo goed mogelijk na te bootsen.

Enkele belangrijke stealth-technieken zijn onder meer:

  • Roterende user-agents: De user-agent is een tekenreeks die de client identificeert die een verzoek indient. Het gebruik van dezelfde user-agent voor alle verzoeken is een duidelijke aanwijzing dat verkeer afkomstig is van een bot. Houd in plaats daarvan een verzameling user-agentreeksen bij en selecteer willekeurig een andere voor elk verzoek.

  • Roterende IP-adressen: Het verzenden van een groot aantal verzoeken vanaf één enkel IP-adres is een andere waarschuwing voor botdetectiesystemen. Gebruik een proxyservice om verzoeken via verschillende IP-adressen te routeren. Voor de beste resultaten kiest u een provider die een groot aantal residentiële IP's aanbiedt.

  • Willekeurige verzoekpatronen: Mensen surfen niet op een volkomen regelmatige manier op websites. Ze pauzeren, wisselen onregelmatig van pagina en variëren de tijd tussen verzoeken. Introduceer willekeurige vertragingen tussen uw webscraping-verzoeken en voorkom dat sites in een perfect voorspelbaar patroon worden gecrawld.

  • CAPTCHA's verwerken: Sommige websites presenteren CAPTCHA's wanneer ze botactiviteit vermoeden. CAPTCHA's kunnen voor webschrapers lastig zijn om automatisch op te lossen. Als u ze vaak tegenkomt, moet u mogelijk een CAPTCHA-oplossingsservice gebruiken die menselijke werknemers gebruikt om de uitdagingen namens uw schraper te voltooien.

Hier is een voorbeeld van een heimelijker verzoek in Python met behulp van een willekeurige user-agent en vertragingen:

import requests
import random
import time

# List of user agent strings
user_agents = [    
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36‘,
    ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36‘,  
]

# Randomize user agent 
headers = {‘User-Agent‘: random.choice(user_agents)}

# Introduce a random delay of 1-5 seconds
time.sleep(random.randint(1, 5))

# Send the request
response = requests.get(‘https://example.com‘, headers=headers)

Door stappen te ondernemen om het verkeer van uw webschraper er zo ‘menselijk’ mogelijk uit te laten zien, kunt u het risico op 403-fouten en andere obstakels aanzienlijk verkleinen.

Ondetecteerbare automatisering

Voor de meest onopvallende webscraping wilt u misschien een volledige browserautomatiseringstool zoals Puppeteer of Playwright gebruiken. Deze tools voeren programmatisch een echte browser (Chrome of Firefox) uit, waardoor u met websites kunt communiceren op een manier die moeilijk te onderscheiden is van echte menselijke gebruikers.

Browserautomatiseringstools kunnen worden geconfigureerd voor maximale stealth. U kunt ze bijvoorbeeld instellen om JavaScript-vingerafdrukcode te blokkeren, de veelbetekenende tekenen van automatisering in Navigator-objecten te maskeren en de dimensies van de viewport willekeurig te maken. Door een echte browser te besturen, krijgt u ook automatische afhandeling van cookies, headers, omleidingen en andere aspecten van HTTP die standaard webscraping-bibliotheken niet voor u beheren.

Het nadeel van browserautomatisering is dat het meer middelen vergt en langzamer is dan het verzenden van eenvoudige HTTP-verzoeken met een bibliotheek zoals Requests of Axios. De afweging in prestaties kan echter de moeite waard zijn voor sites die bijzonder agressief zijn in het blokkeren van scrapers.

Hier is een eenvoudig voorbeeld van het gebruik van Puppeteer in Node.js om een ​​pagina in headless Chrome te bezoeken:

const puppeteer = require(‘puppeteer‘);

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // Configure the browser for stealth (omitted for brevity)

  await page.goto(‘https://example.com‘);

  // Scrape data from the page...

  await browser.close();
})();

Met wat extra configuratie kunnen tools zoals Puppeteer een krachtige manier zijn om het scrapen te automatiseren en tegelijkertijd detectie te vermijden.

Conclusie

Het tegenkomen van 403-fouten is een onvermijdelijk onderdeel van webscraping, maar met de juiste aanpak hoeven ze uw projecten niet te laten ontsporen. Door te begrijpen waarom 403’s plaatsvinden en stappen te ondernemen om te voorkomen dat ze worden geactiveerd – door middel van authenticatie, stealth-technieken en niet-detecteerbare automatisering – kunt u ervoor zorgen dat uw webschraper soepel blijft werken.

De meest effectieve aanpak hangt af van de specifieke websites die u target. Sommige vereisen mogelijk alleen eenvoudige verzoekheaders om 403's te vermijden, terwijl andere mogelijk een volledige browserautomatisering vereisen. De sleutel is om te beginnen met basistechnieken en indien nodig meer geavanceerde stealth-lagen toe te voegen op basis van de obstakels die je tegenkomt.

Als de steeds evoluerende uitdaging van het vermijden van 403's en andere anti-scraping-maatregelen ontmoedigend lijkt, kunt u overwegen om een ​​kant-en-klare webscraping-API te gebruiken in plaats van uw eigen scraping-infrastructuur te bouwen en te onderhouden. Diensten zoals ScrapingBee en ScraperAPI bieden beproefde scrapers met ingebouwde 403-vermijding die u aanzienlijke ontwikkelingstijd kunnen besparen.

Of u er nu voor kiest om uw eigen webschraper te gebruiken of een kant-en-klare oplossing te gebruiken, het belangrijkste is dat 403-fouten u er niet van weerhouden de gegevens te verkrijgen die u nodig heeft. Met een beetje doorzettingsvermogen en de juiste hulpmiddelen in uw uitrusting kunt u uw webschraper draaiende houden ondanks eventuele tegenmaatregelen tegen bots. Veel plezier met schrapen!

Doe mee aan het gesprek

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