Meteen naar de inhoud

De complete gids voor snelheidsbeperking voor verantwoord webscrapen

Asynchrone programmering en bibliotheken zoals aiohttp en httpx zijn een uitkomst geworden voor moderne webscraping vanwege hun snelheid en schaalbaarheid. Dankzij de mogelijkheid om honderden verzoeken tegelijkertijd af te vuren, kunnen we razendsnel gegevens verzamelen.

Deze hernieuwde schraapkracht brengt echter een belangrijke verantwoordelijkheid met zich mee: we moeten onze aanvraagpercentages beperken om te voorkomen dat websites beschadigd raken of geblokkeerd worden. Gelukkig biedt Python veel geweldige opties voor gecontroleerd, verantwoord schrapen.

In deze uitgebreide handleiding bespreken we verschillende methoden en best practices voor het beperken van asynchrone webschrapers. Of u nu respectvol, duurzaam, legaal of al het bovenstaande wilt schrapen: lees verder voor strategieën om te voorkomen dat sites in brand worden gestoken!

De groeiende dreiging van agressief webscrapen

Laten we beginnen met wat achtergrondinformatie over waarom verantwoorde tariefbeperking essentieel is geworden bij het schrapen van sites.

De afgelopen vijf jaar is het volume van problematisch schrapen tot duizelingwekkende niveaus geëxplodeerd. Sommige schattingen suggereren ruim 40% van al het webverkeer komt nu van scrapers of bots van een of andere vorm.

Een groot deel van deze groei is veroorzaakt door de toenemende toegankelijkheid van tools als Puppeteer, Playwright en proxydiensten die het bouwen van schaalbare scrapers eenvoudiger dan ooit maken. Maar helaas tonen de meeste van deze bots weinig aandacht voor verantwoord schrapen.

Deze stortvloed aan scrapactiviteiten heeft veel websites overweldigd. Zelfs grote bedrijven als LinkedIn, Amazon en Craigslist hebben te kampen gehad met scraper-misbruik:

En voor kleinere websites met beperkte middelen kan agressief schrapen de functionaliteit volledig verbreken of afsluiten. Er zijn helaas veel voorbeelden dat dit via internet gebeurt.

Het is duidelijk dat ongebreideld, roekeloos webscrapen een ernstige bedreiging vormt voor de gezondheid van het internet. De gemeenschap moet zichzelf reguleren voor het grotere goed.

Kernprincipes van verantwoord webscrapen

Dus wat houdt verantwoord webscrapen precies in in dit tijdperk van botproliferatie? Hier zijn enkele kernprincipes waarmee u rekening moet houden:

  • Legaal schrappen – Blijf voldoen aan de servicevoorwaarden van sites en respecteer auteursrechten. Vraag waar nodig toestemming.

  • Ethisch schrappen – Breng de functionaliteit en prestaties van de website niet in gevaar en kost de eigenaren geen geld.

  • Beleefd schrapen – Kruip met redelijke snelheden om te voorkomen dat het op een aanval of denial-of-service lijkt.

  • Duurzaam schrapen – Zorg ervoor dat uw schraapinspanningen niet langdurig worden geblokkeerd. Toegang behouden.

Het volgen van deze principes betekent dat u opzettelijk uw schraapsnelheid en -volume beperkt. Het naleven van gepubliceerde crawlbudgetten, tarieflimieten en indien nodig betalen voor commerciële scrapingtools. Het is onze plicht als programmeurs.

De rol van snelheidsbeperking bij verantwoord schrapen

Snelheidsbeperking speelt specifiek een belangrijke rol bij het volgen van de bovenstaande verantwoorde schraappraktijken. Laten we eens kijken waarom het beperken van de aanvraagpercentages zo cruciaal is:

  • Vermijdt blokkades – Het te snel verzenden van verzoeken is een van de eenvoudigste manieren waarop scrapers worden gedetecteerd en geblokkeerd. Vertraag om onder de radar te blijven.

  • Verlicht de serverbelasting – Snel schrapen kan doelsites gemakkelijk overbelasten, waardoor de prestaties afnemen. Door de RPS te beperken, wordt voorkomen dat hun infrastructuur wordt getaxeerd.

  • Verbetert de betrouwbaarheid – Spammingverzoeken leiden vaak tot mislukte en geblokkeerde verzoeken. Zorgvuldige snelheidsbeperking resulteert in hogere succespercentages.

  • Maakt monitoring mogelijk – Met beperking kunt u logboeken en statistieken bekijken om problemen te identificeren en fouten bij blindelings opnieuw proberen en spammen te identificeren.

  • Maakt naleving mogelijk – Veel sites verbieden scraping volledig of leggen limieten op zoals 1 verzoek/5 sec in hun Servicevoorwaarden. Door te smoren kunt u hun regels volgen.

Kortom, snelheidsbeperking is essentieel voor betrouwbaar, legaal, duurzaam en beleefd schrapen. Het is onze verantwoordelijkheid als programmeurs. Laten we nu enkele technieken onderzoeken om Python-schrapers efficiënt te beperken.

Asynchrone scrapingbibliotheken voor gebruik met snelheidsbeperking

Omdat deze handleiding zich richt op het beperken van asynchrone scrapersnelheden, laten we eerst enkele populaire asynchrone scrapingbibliotheken in Python bespreken:

NaamOmschrijvingSterke punten
httpxVolledig functionele asynchrone HTTP-clientSnel, gemakkelijk te gebruiken
aiohttpVeteraan asynchrone bibliotheekGeweldige documenten, ondersteuning
trio-websocketAsynchrone websocketsSnelle automatisering
trekGebouwd op TwistedPerformance

Voor algemeen robuust schrapen, httpx is mijn persoonlijke aanbeveling, die uitstekende prestaties en bruikbaarheid biedt. Elk van deze bibliotheken kan echter profiteren van snelheidsbeperking.

Met deze tools kunnen we honderden of duizenden gelijktijdige verzoeken doen om echt de snelheidsvoordelen van asynchrone programmering te benutten. We moeten echter op verantwoorde wijze beperken hoe snel ze schrapen met de technieken die we nu zullen behandelen.

Eenvoudige benaderingen om de snelheid van de Python Async Scraper te beperken

Voordat we in robuustere oplossingen duiken, beginnen we met een paar basismanieren om de doorvoer van asynchrone scrapers te beperken:

Expliciete slaapplaatsen tussen verzoeken

De eenvoudigste gasklepmethode is het toevoegen van kleine hoeveelheden time.sleep() oproepen in uw verzoeklussen:

import time

# Sleep 0.1 sec to limit to 10 RPS 
time.sleep(0.1)

Voors:

  • Makkelijk te implementeren

nadelen:

  • Niet precies: de slaapplaatsen stapelen zich op
  • Moeilijk om verzoeken te monitoren

Dit werkt in basisgevallen, maar mist de precisie en zichtbaarheid van andere opties die we zullen bespreken.

Gelijktijdige verzoeken beperken

We kunnen het aantal verzoeken dat gelijktijdig wordt uitgevoerd beperken met behulp van semaforen:

# Limit to 10 concurrent requests
sem = asyncio.Semaphore(10)  

async def request():
   async with sem:
     await fetch()

Voors:

  • Beperkt parallelle belasting op doellocaties

nadelen:

  • Nog steeds geen controle over het totale aantal verzoeken per seconde
  • Moeilijk te monitoren/meten doorvoer

Opnieuw bruikbaar in eenvoudige gevallen, maar mist precisiecontroles. Laten we eens kijken naar robuustere bibliotheken die ons exacte RPS-beperkingen geven.

Nauwkeurige snelheidsbegrenzing met Aiometer voor soepel Python Scraping

Een van de meest populaire Python-bibliotheken voor het beperken van asynchrone code is Aiometer. Met slechts een paar regels kunt u schrapers eenvoudig afstemmen op nauwkeurige verzoeken per seconde.

Aiometer werkt door asynchrone code als volgt in te pakken:

import aiometer

async def fetch(url):
   # make request

await aiometer.run_on_each(
   fetch, 
   urls,
   max_per_second=5
)

We kunnen dan een exacte snelheidslimiet instellen, zoals 5 RPS, die de aiometer voor ons zal afdwingen. Dit zorgt voor nauwkeurige controle over de doorvoer.

Voors:

  • Eenvoudige API
  • Nauwkeurige beperking tot het exacte RPS-tarief
  • Inzicht in alle aanvragen
  • Ondersteunt ook maximale gelijktijdigheid

In mijn ervaring biedt aiometer momenteel de beste kant-en-klare snelheidslimiet voor async-scraping in Python. De configuratie is minimaal en maakt schrapers betrouwbaar glad.

Laten we nu eens naar een echt voorbeeld kijken.

Casestudy van Aiometer: Google Nieuws op verantwoorde wijze schrapen

Om aiometer in actie te demonstreren, volgt hier een voorbeeldscript waarmee u met gecontroleerde snelheid de laatste krantenkoppen uit Google Nieuws kunt schrappen:

import asyncio
from httpx import AsyncClient
import aiometer
from bs4 import BeautifulSoup

async def fetch(url):
   async with AsyncClient() as client:
      resp = await client.get(url)
      soup = BeautifulSoup(resp.text, ‘html.parser‘)

      for title in soup.select(‘h3‘):
         print(title.text)

async def main():
   urls = [
      ‘https://news.google.com/‘ 
      for _ in range(50)
   ]

   await aiometer.run_on_each(
      fetch, urls, max_per_second=2  
   )

asyncio.run(main())

Hier gebruiken we httpx om de pagina op te halen, BeautifulSoup om deze te parseren en aiometer om de algehele scrapingsnelheid te beperken tot 2 verzoeken per seconde.

Hierdoor kunnen we efficiënt alle krantenkoppen verzamelen met de volledige kracht van async, terwijl we nog steeds verantwoordelijk zijn tegenover de servers van Google. Als we op volle snelheid zouden schrapen, zouden ze waarschijnlijk ons ​​verkeer blokkeren.

Voor openbare sites als deze maakt Aiometer het triviaal om de juiste balans tussen prestaties en verantwoordelijkheid te vinden.

Geavanceerde proxyrotatie voor zwaardere doelen

Voor meer geavanceerde websites zoals Google, Facebook of LinkedIn is tariefbeperking alleen vaak niet voldoende om op de lange termijn betrouwbaar te blijven. Deze sites beschikken over geavanceerde botbeschermingssystemen om scrapers op agressieve wijze te detecteren en te blokkeren.

Om succesvol te schrappen en tegelijkertijd doelen te respecteren EN blokkades te vermijden, worden commerciële proxydiensten essentieel. Proxy's bieden nieuwe IP-adressen om verzoeken over meerdere identiteiten te verdelen.

Mijn ervaring is dat residentiële proxypools het meest effectief zijn om blokkades te omzeilen bij het schrapen van lastige sites.

Hier zijn enkele prominente services en hun belangrijkste voordelen:

  • smartproxy – Meer dan 10 miljoen residentiële IP's met diepe integratie voor sites als Instagram en LinkedIn. Snelle prestaties.

  • Luminati – De oorspronkelijke pionier op het gebied van residentiële proxy's, met enorme peer-to-peer IP-pools. Uitstekende dekking wereldwijd.

  • ScrapeOps – Moderne beheerde proxy’s geoptimaliseerd voor headless browsers zoals Playwright. Vaste IP-sticky-sessies.

  • GeoSurf – Focus op residentiële volmachten in nichelanden zoals Zuid-Afrika. Goed voor internationale targeting.

Het integratieproces varieert per provider, maar omvat over het algemeen:

  1. Roterende proxy voor elk nieuw verzoek
  2. Pools gesegmenteerd op basis van de vereisten van de doellocatie
  3. Gebruik van andere proxyparameters zoals land, user-agent, enz

Deze geavanceerde proxy-afhandeling in combinatie met verzoekbeperking biedt een krachtige combinatie voor het verantwoord schrapen van vrijwel elke site.

Hier zijn enkele benchmarks die laten zien hoeveel proxy's de succespercentages verhogen bij het schrapen van uitdagende sites:

WebsiteSuccespercentage met proxy'sSuccespercentage zonder proxy's
Kopen Google Reviews95%62%
LinkedIn89%23%
Inderdaad90%67%
Instagram98%11%

Zoals u kunt zien, vergroten proxy's de betrouwbaarheid enorm door botbeveiligingssystemen te verslaan. Ze brengen wel extra kosten met zich mee, maar maken het mogelijk om sites te schrapen die anders erg moeilijk zijn. Voor commerciële scraping worden proxy's als verplicht beschouwd.

Naast het technisch respecteren van websites, moeten we er ook voor zorgen dat we legaal scrapen met de juiste gebruiksrechten en toestemmingen.

Het juridische landschap rond webscraping blijft enigszins dubbelzinnig, maar er zijn een paar belangrijke principes waarmee u rekening moet houden:

  • Het schrappen van puur openbare gegevens valt in de VS waarschijnlijk onder het recht op redelijk gebruik. Veel andere landen verbieden het echter.

  • Als u de Servicevoorwaarden van een site schendt door te scrapen, kunt u nog steeds te maken krijgen met civiele rechtszaken zoals een last onder dwangsom of schadevergoeding onder de CFAA.

  • Technisch gezien hebben openbare overheidssites de meest duidelijke juridische status voor onbelemmerd schrapen. Maar de regelgeving verschilt van land tot land.

  • Voor auteursrechtelijk beschermde gegevens zoals artikelen zijn licenties vereist om legaal te kunnen scrapen. Nieuwssites zullen de toegang vaak ernstig beperken of verbieden.

  • Het verzamelen van persoonlijke informatie zoals e-mails of gegevens van sociale media is vaak in strijd met de privacywetten, afhankelijk van het gebruik.

Samenvattend: hoewel het verzamelen van openbare gegevens waarschijnlijk onder redelijk gebruik valt, blijven de wetten complex en kunnen overtredingen in sommige gevallen civielrechtelijke of strafrechtelijke sancties met zich meebrengen. Raadpleeg een advocaat voor advies over uw specifieke gebruikscasus.

Ik zou deze best practices vanuit mijn ervaring aanbevelen:

  • Respecteer robots.txt: De crawlrichtlijnen geven aan of een site scrapen toestaat. Houd er rekening mee dat robots.txt echter niet juridisch bindend is.

  • Servicevoorwaarden lezen: Begrijp precies wat is toegestaan ​​of verboden volgens de gebruiksvoorwaarden van een site.

  • Onderzoeksprioriteit: Controleer rechtszaken waarbij sprake is van soortgelijke vormen van schrapen voor uw doel.

  • Toestemming vragen: Als de wettigheid dubbelzinnig lijkt, kan het direct vragen aan de website om toegang te verkrijgen uw basis helpen dekken.

Hoewel snelheidsbeperking het mogelijk maakt om op een duurzame en conforme manier te scrapen, moeten we ook de wet en het sitebeleid raadplegen om legaal te scrapen.

Laatste gedachten over het verantwoord schrapen van het internet

Tot slot hoop ik dat deze handleiding een uitgebreid overzicht heeft gegeven van technieken en best practices voor het beperken van asynchrone Python-scrapers.

Snelheidsbeperking zorgt ervoor dat we verantwoord schrapen door:

  • Blokkades vermijden
  • Respecteren van sitebronnen
  • Legaal en compliant schrapen
  • Betrouwbare gegevensverzameling mogelijk maken

Bibliotheken zoals aiometer maken nauwkeurige throttling eenvoudig te implementeren. En commerciële proxy's/browsers bieden essentiële bescherming bij het schrapen van moeilijkere sites.

Maar hoewel de technische oplossingen bestaan, moeten wij als gemeenschap ook filosofisch verantwoord schrapen omarmen. Met grote schraapkracht komt grote verantwoordelijkheid.

Door zelfregulerend en opzettelijk onze impact te beperken, kunnen we een duurzaam web-ecosysteem koesteren. Schraap daar alsjeblieft voorzichtig weg!

Tags:

Doe mee aan het gesprek

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