Salta al contenuto

La guida completa al rate limiting per un web scraping responsabile

La programmazione asincrona e le librerie come aiohttp e httpx sono diventate una manna dal cielo per il moderno web scraping grazie alla loro velocità e scalabilità. La capacità di inviare centinaia di richieste contemporaneamente ci consente di raccogliere dati a velocità incredibilmente elevate.

Tuttavia, questo ritrovato potere di scraping comporta un’importante responsabilità: dobbiamo limitare i nostri tassi di richiesta per evitare di danneggiare i siti Web o di essere bloccati. Per fortuna, Python offre molte ottime opzioni per uno scraping controllato e responsabile.

In questa guida completa, tratteremo diversi metodi e best practice per i web scraper asincroni con limitazione della velocità. Che tu stia cercando di eseguire lo scraping in modo rispettoso, sostenibile, legale o tutto quanto sopra, continua a leggere per scoprire le strategie per evitare di bruciare i siti!

La crescente minaccia del web scraping aggressivo

Cominciamo con alcune informazioni di base sul motivo per cui la limitazione responsabile della velocità è diventata essenziale durante lo scraping dei siti.

Negli ultimi 5 anni, il volume degli scraping problematici è esploso a livelli sconcertanti. Alcune stime suggeriscono oltre il 40% di tutto il traffico web ora proviene da scraper o bot di qualche forma.

Gran parte di questa crescita è stata alimentata dalla crescente accessibilità di strumenti come Puppeteer, Playwright e servizi proxy che rendono la creazione di scraper scalabili più semplice che mai. Ma sfortunatamente, la maggior parte di questi robot mostra poca attenzione allo scraping responsabile.

Questo torrente di attività di scraping ha travolto molti siti web. Anche grandi proprietà come LinkedIn, Amazon e Craigslist hanno lottato contro l'abuso degli scraper:

E per i siti Web più piccoli con risorse limitate, lo scraping aggressivo può interrompere completamente la funzionalità o bloccarli. Ci sono purtroppo molti Esempi di ciò che accade su Internet.

È chiaro che il web scraping sfrenato e sconsiderato rappresenta una seria minaccia per la salute del web. La comunità deve autoregolamentarsi per il bene comune.

Principi fondamentali del web scraping responsabile

Quindi, cosa costituisce esattamente il web scraping responsabile in quest’era di proliferazione dei bot? Ecco alcuni principi fondamentali da tenere a mente:

  • Raschiare legalmente – Rimani conforme ai Termini di servizio dei siti e rispetta i diritti d'autore. Ottieni il permesso dove richiesto.

  • Raschiare eticamente – Non danneggiare la funzionalità e le prestazioni del sito Web e non costare denaro ai proprietari.

  • Raschiando educatamente – Eseguire la scansione a velocità ragionevoli per evitare di sembrare un attacco o una negazione del servizio.

  • Raschiare in modo sostenibile – Non bloccare i tuoi sforzi di raschiatura a lungo termine. Preserva l'accesso.

Seguire questi principi significa limitare intenzionalmente la velocità e il volume di raschiatura. Rispettare i budget di scansione pubblicati, i limiti di tariffa e pagare per strumenti di scraping commerciale, se necessario. È nostro dovere come programmatori.

Il ruolo della limitazione della velocità per la raschiatura responsabile

La limitazione della velocità svolge specificamente un ruolo importante nel seguire le pratiche di raschiamento responsabile di cui sopra. Diamo un'occhiata al motivo per cui la limitazione dei tassi di richiesta è così cruciale:

  • Evita i blocchi – L’invio di richieste troppo rapidamente è uno dei modi più semplici con cui gli scraper vengono rilevati e bloccati. Rallenta per rimanere sotto il radar.

  • Alleggerisce il carico del server – Lo scraping rapido può facilmente sovraccaricare i siti di destinazione, riducendo le prestazioni. Limitare gli RPS impedisce di tassare le loro infrastrutture.

  • Migliora l'affidabilità – Le richieste di spam spesso portano a richieste fallite e bloccate. Un'attenta limitazione della velocità si traduce in tassi di successo più elevati.

  • Consente il monitoraggio – Con la limitazione è possibile esaminare registri e parametri per identificare i problemi rispetto ai tentativi ciechi e agli errori di spam.

  • Consente la conformità – Molti siti vietano completamente lo scraping o impongono limiti come 1 richiesta/5 secondi nei propri ToS. La limitazione ti consente di seguire le loro regole.

Quindi, in sintesi, la limitazione della velocità è essenziale per effettuare operazioni di scraping in modo affidabile, legale, sostenibile e educato. È nostra responsabilità come programmatori. Ora esploriamo alcune tecniche per limitare in modo efficiente gli scraper Python.

Librerie di scraping asincrone da utilizzare con la limitazione della velocità

Poiché questa guida si concentra sulla limitazione delle velocità dello scraping asincrono, trattiamo prima alcune popolari librerie di scraping asincrone in Python:

NomeDescrizionePunti di forza
httpxClient HTTP asincrono completo di funzionalitàVeloce, facile da usare
aio httpLibreria asincrona veteranaOttimi documenti, supporto
trio-websocketWeb socket asincroniAutomazione veloce
treqCostruito su TwistedPrestazione

Per una raschiatura robusta generale, httpx è la mia raccomandazione personale, poiché fornisce prestazioni e usabilità eccellenti. Tuttavia, ognuna di queste biblioteche può trarre vantaggio dalla limitazione della velocità.

Questi strumenti ci consentono di effettuare centinaia o migliaia di richieste simultanee per sfruttare davvero i vantaggi in termini di velocità della programmazione asincrona. Tuttavia, dobbiamo limitare responsabilmente la velocità con cui si raschiano con le tecniche che ora tratteremo.

Approcci semplici per limitare la velocità dello scraper asincrono Python

Prima di immergerci in soluzioni più robuste, iniziamo con alcuni modi di base per limitare la produttività dello scraper asincrono:

Sleep espliciti tra le richieste

Il metodo di accelerazione più semplice è aggiungere piccolo time.sleep() chiamate nei cicli di richiesta:

import time

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

PRO:

  • Facile da implementare

Contro:

  • Non preciso: i posti letto si accumulano
  • Difficile monitorare le richieste

Funziona nei casi base, ma manca della precisione e della visibilità di altre opzioni che tratteremo.

Limitare le richieste simultanee

Possiamo limitare il numero di richieste eseguite contemporaneamente utilizzando i semafori:

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

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

PRO:

  • Limita il carico parallelo sui siti di destinazione

Contro:

  • Ancora nessun controllo sulle richieste complessive al secondo
  • Difficile da monitorare/misurare la produttività

Anche in questo caso utilizzabile in casi semplici, ma manca di controlli di precisione. Diamo un'occhiata alle librerie più robuste che ci forniscono un limite RPS esatto.

Limitazione precisa della velocità con Aiometro per un raschiamento Python fluido

Una delle librerie Python più popolari per la limitazione del codice asincrono è Aiometro. Con poche righe consente di tappare facilmente i raschiatori a precise richieste al secondo.

Aiometer funziona avvolgendo il codice asincrono in questo modo:

import aiometer

async def fetch(url):
   # make request

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

Possiamo quindi impostare un limite di velocità esatto come 5 RPS che aiometer applicherà per noi. Ciò fornisce un controllo accurato sulla velocità effettiva.

PRO:

  • API semplice
  • Limitazione precisa alla frequenza RPS esatta
  • Visibilità su tutte le richieste
  • Supporta anche la massima concorrenza

Nella mia esperienza, aiometer attualmente fornisce la migliore limitazione della velocità chiavi in ​​mano per lo scraping asincrono Python. La configurazione è minima e livella in modo affidabile i raschiatori.

Di seguito esaminiamo un esempio reale.

Caso di studio Aiometer: eliminare Google News in modo responsabile

Per dimostrare l'aiometer in azione, ecco uno script di esempio per estrarre gli ultimi titoli da Google News a velocità controllata:

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())

Qui utilizziamo httpx per catturare la pagina, BeautifulSoup per analizzarla e aiometer per limitare la velocità di scraping complessiva a 2 richieste al secondo.

Questo ci consente di raccogliere in modo efficiente tutti i titoli con tutta la potenza dell'asincrono, pur rimanendo responsabili nei confronti dei server di Google. Se sfrecciassimo a tutta velocità, probabilmente bloccherebbero il nostro traffico.

Per siti pubblici come questo, aiometer rende banale trovare il giusto equilibrio tra prestazioni e responsabilità.

Rotazione proxy avanzata per obiettivi più difficili

Per i siti web più sofisticati come Google, Facebook o LinkedIn, la sola limitazione della velocità spesso non è sufficiente per ottenere risultati affidabili a lungo termine. Questi siti dispongono di sistemi avanzati di protezione dei bot per rilevare e bloccare gli scraper in modo aggressivo.

Per racimolare con successo rispettando gli obiettivi ed evitando i blocchi, i servizi di proxy commerciale diventano essenziali. I proxy forniscono nuovi indirizzi IP per distribuire le richieste su più identità.

Nella mia esperienza, i pool proxy residenziali sono i più efficaci per eludere i blocchi durante lo scraping di siti difficili.

Ecco alcuni servizi importanti e i loro principali vantaggi:

  • proxy intelligente – Oltre 10 milioni di IP residenziali con profonda integrazione per siti come Instagram e LinkedIn. Prestazioni veloci.

  • Luminati – Il pioniere originale dei proxy residenziali, con enormi pool IP peer-to-peer. Ottima copertura a livello globale.

  • ScrapeOps – Proxy gestiti moderni ottimizzati per browser headless come Playwright. Risolte le sessioni IP permanenti.

  • GeoSurf – Focus sui proxy residenziali in paesi di nicchia come il Sud Africa. Buono per il targeting internazionale.

Il processo di integrazione varia a seconda dei fornitori, ma generalmente comporta:

  1. Delega a rotazione per ogni nuova richiesta
  2. Pool segmentati in base ai requisiti del sito di destinazione
  3. Utilizzando altri parametri proxy come paese, agente utente, ecc

Questa gestione avanzata dei proxy combinata con la limitazione delle richieste fornisce una potente combinazione per lo scraping responsabile di quasi tutti i siti.

Ecco alcuni benchmark che mostrano quanto i proxy aumentino le percentuali di successo durante lo scraping di siti impegnativi:

WebsiteTasso di successo con i proxyTasso di successo senza proxy
Google95%62%
LinkedIn89%23%
Infatti90%67%
Instagram98%11%

Come puoi vedere, i proxy aumentano notevolmente l’affidabilità sconfiggendo i sistemi di protezione dei bot. Hanno un costo aggiuntivo, ma consentono lo scraping di siti che altrimenti sarebbero molto difficili. Per lo scraping commerciale le deleghe sono considerate obbligatorie.

Oltre a rispettare tecnicamente i siti Web, dobbiamo anche garantire lo scraping legalmente con diritti e autorizzazioni di utilizzo adeguati.

Il panorama legale relativo al web scraping rimane alquanto ambiguo, ma ci sono alcuni principi chiave da tenere a mente:

  • Negli Stati Uniti, l’eliminazione di dati puramente pubblici rientra probabilmente nei diritti di fair use. Tuttavia, molti altri paesi lo vietano.

  • La violazione dei Termini di servizio di un sito mediante lo scraping può comunque aprirti a cause civili come cessazione e desistenza o danni ai sensi della CFAA.

  • Tecnicamente i siti governativi pubblici hanno la posizione legale più chiara per lo scraping senza restrizioni. Ma le normative variano da uno stato all’altro.

  • I dati protetti da copyright come gli articoli richiedono licenze per essere recuperati legalmente. I siti di notizie spesso limitano o proibiscono severamente l'accesso.

  • L'eliminazione di informazioni personali come e-mail o dati dei social media spesso entra in conflitto con le leggi sulla privacy a seconda dell'utilizzo.

Quindi, in sintesi, anche se l’eliminazione dei dati pubblici rientra probabilmente nel fair use, le leggi rimangono complesse e in alcuni casi le violazioni possono comportare sanzioni civili o penali. Consulta un avvocato per avere indicazioni sul tuo caso d'uso specifico.

Consiglierei queste best practice in base alla mia esperienza:

  • Rispetta robots.txt: Le direttive di scansione indicano se un sito consente lo scraping. Tieni presente che robots.txt non è tuttavia legalmente vincolante.

  • Leggere i Termini di Servizio: Comprendi esattamente cosa è consentito o proibito nei termini di utilizzo di un sito.

  • Precedenza della ricerca: Controlla i casi giudiziari che coinvolgono tipi simili di raschiamento per il tuo obiettivo.

  • Chiedere il permesso: Se la legalità sembra ambigua, chiedere direttamente al sito web l'accesso tramite scraping può aiutarti a coprire le tue basi.

Sebbene la limitazione della velocità consenta lo scraping in modo conforme e sostenibile, dobbiamo anche consultare la legge e le politiche del sito per effettuare lo scraping legalmente.

Considerazioni finali sullo scraping del Web in modo responsabile

In chiusura, spero che questa guida abbia fornito una panoramica completa delle tecniche e delle migliori pratiche per limitare gli scraper asincroni di Python.

La limitazione della velocità ci garantisce di racimolare in modo responsabile:

  • Evitare i blocchi
  • Rispettare le risorse del sito
  • Raschiatura legale e conforme
  • Consentire una raccolta dati affidabile

Librerie come aiometer semplificano l'implementazione di una limitazione precisa. E i proxy/browser commerciali forniscono una protezione essenziale durante lo scraping dei siti più difficili.

Ma anche se esistono soluzioni tecniche, noi come comunità dobbiamo anche abbracciare filosoficamente lo scraping responsabile. Da un grande potere raschiante derivano grandi responsabilità.

Autoregolamentandoci e limitando intenzionalmente il nostro impatto, possiamo coltivare un ecosistema web sostenibile. Per favore, gratta delicatamente là fuori!

Tag:

Partecipa alla conversazione

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *