Home/ Wiki/ Siti Web/ Web Scraping

Web Scraping Etico

Come raccogliere dati dal web in modo responsabile: strumenti Python, rispetto del robots.txt, conformità GDPR e casi d'uso legittimi.

Indice dei contenuti
Aggiornato: Aprile 2026 9 min di lettura

Cos'è il web scraping

Il web scraping è il processo automatizzato di estrazione di dati da pagine web. Un programma (detto spider o crawler) visita le pagine, analizza il codice HTML e ne estrae le informazioni desiderate: testi, prezzi, link, immagini o qualsiasi dato strutturato presente nel DOM.

A differenza delle API, che forniscono dati in formato strutturato e con il consenso esplicito del provider, lo scraping opera sul contenuto visibile della pagina. Questo solleva questioni etiche e legali che ogni sviluppatore deve conoscere prima di scrivere una sola riga di codice.

"Il web scraping è uno strumento potente. Come ogni strumento potente, la differenza tra uso legittimo e abuso sta nella responsabilità di chi lo utilizza."

Strumenti Python

Python è il linguaggio più utilizzato per il web scraping grazie a un ecosistema di librerie mature e ben documentate.

BeautifulSoup

Libreria leggera per il parsing di HTML e XML. Ideale per progetti semplici e pagine statiche. Si combina con requests per scaricare le pagine.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://esempio.it/prodotti")
soup = BeautifulSoup(response.text, "html.parser")

for prodotto in soup.select(".product-card"):
    nome = prodotto.select_one("h2").text
    prezzo = prodotto.select_one(".price").text
    print(f"{nome}: {prezzo}")

Scrapy

Framework completo per scraping su larga scala. Gestisce automaticamente concorrenza, retry, pipeline di dati, middleware e rispetto del robots.txt. È la scelta migliore per progetti professionali con migliaia di pagine.

import scrapy

class ProdottiSpider(scrapy.Spider):
    name = "prodotti"
    start_urls = ["https://esempio.it/prodotti"]

    def parse(self, response):
        for card in response.css(".product-card"):
            yield {
                "nome": card.css("h2::text").get(),
                "prezzo": card.css(".price::text").get(),
            }

Selenium e Playwright

Per siti con contenuti generati da JavaScript (SPA, React, Vue), BeautifulSoup non basta. Selenium e Playwright controllano un browser reale, eseguono il JavaScript e permettono di estrarre il DOM renderizzato. Playwright è più veloce e moderno, con supporto nativo per async.

Rispettare il robots.txt

Il file robots.txt, posizionato nella root di ogni sito (es. https://esempio.it/robots.txt), definisce le regole di accesso per i crawler. Rispettarlo è il primo requisito dello scraping etico.

  • User-agent: specifica a quale crawler si applicano le regole.
  • Disallow: indica i percorsi che non devono essere scansionati.
  • Crawl-delay: suggerisce l'intervallo minimo tra le richieste.
  • Sitemap: indica la posizione della sitemap XML.
Attenzione: il robots.txt è una convenzione, non un meccanismo di sicurezza. Tecnicamente può essere ignorato, ma farlo è considerato comportamento non etico e può avere conseguenze legali. Scrapy rispetta automaticamente il robots.txt tramite il middleware RobotsTxtMiddleware.

Rate limiting etico

Anche quando il robots.txt non specifica un Crawl-delay, è fondamentale limitare la frequenza delle richieste per non sovraccaricare il server del sito target.

  • Intervallo tra le richieste: attendere almeno 1-2 secondi tra una richiesta e l'altra. Per siti piccoli, 3-5 secondi sono più appropriati.
  • Concorrenza limitata: non aprire più di 2-4 connessioni simultanee verso lo stesso dominio.
  • Header User-Agent: identificarsi con un User-Agent descrittivo che includa un contatto email, così il proprietario del sito può contattarti.
  • Orari off-peak: se possibile, eseguire lo scraping durante le ore di minor traffico del sito (notte, weekend).
  • Caching locale: salvare le risposte in locale per evitare di richiedere più volte la stessa pagina.

In Scrapy, queste impostazioni si configurano nel file settings.py con le direttive DOWNLOAD_DELAY, CONCURRENT_REQUESTS_PER_DOMAIN e AUTOTHROTTLE_ENABLED.

Legge e GDPR

Il web scraping si muove in un'area grigia dal punto di vista legale. La legalità dipende da cosa si raccoglie, come si usa e in quale giurisdizione si opera.

  • GDPR (Europa): se i dati estratti contengono informazioni personali (nomi, email, indirizzi), si applicano tutte le norme del Regolamento Europeo sulla protezione dei dati. Serve una base giuridica legittima per il trattamento.
  • Termini di servizio: molti siti vietano esplicitamente lo scraping nei loro ToS. Violare i termini di servizio può costituire un illecito contrattuale.
  • Copyright: i contenuti scrappati (testi, immagini) sono protetti dal diritto d'autore. Estrarre e ripubblicare contenuti altrui senza autorizzazione è violazione di copyright.
  • Database Rights (UE): la Direttiva europea 96/9/CE protegge i database originali. L'estrazione sistematica di una parte sostanziale di un database può violare questi diritti.
Regola pratica: prima di fare scraping, chiediti sempre: "Esiste un'API ufficiale per questi dati?" e "I dati che raccolgo contengono informazioni personali?". Se la risposta à sì alla prima, usa l'API. Se la risposta è sì alla seconda, consulta un legale.

Casi d'uso legittimi

Il web scraping, se condotto eticamente, ha numerose applicazioni legittime:

  • Price monitoring: monitorare i prezzi dei concorrenti per adeguare la propria strategia commerciale. Molto usato nell'e-commerce e nel travel.
  • Ricerca accademica: raccogliere dataset per analisi linguistiche, studi sociologici o ricerca in ambito intelligenza artificiale. Molte università hanno policy specifiche per lo scraping a fini di ricerca.
  • Aggregazione news: raccogliere titoli e link da più fonti per creare servizi di rassegna stampa o monitoraggio media.
  • SEO e analisi competitiva: analizzare la struttura, i meta tag e i contenuti dei siti concorrenti per migliorare la propria strategia SEO.
  • Monitoraggio brand: verificare dove e come il proprio brand viene menzionato online.
  • Lead generation: estrarre informazioni di contatto da directory pubbliche (attenzione al GDPR).

Alternative: API ufficiali

Prima di implementare uno scraper, verifica sempre se il sito offre un'API ufficiale. Le API sono sempre preferibili perché:

CriterioWeb ScrapingAPI ufficiale
StabilitàSi rompe ad ogni cambio di layoutVersionata e documentata
Formato datiHTML da parsareJSON/XML strutturato
LegalitàArea grigiaUso autorizzato
Rate limitingDa gestire manualmenteDefinito e documentato
ManutenzioneAlta (fragile)Bassa (contratto stabile)

Piattaforme come Google, Twitter/X, Amazon, GitHub e molte altre offrono API gratuite o a pagamento. Servizi come RapidAPI aggregano migliaia di API in un unico marketplace.

Storage e pulizia dati

I dati grezzi estratti dallo scraping richiedono sempre una fase di pulizia e strutturazione prima di essere utilizzabili.

  • Pulizia HTML: rimuovere tag residui, entità HTML, spazi multipli e caratteri speciali. In Python, bleach e le funzioni di stringa native sono utili.
  • Deduplicazione: eliminare i record duplicati confrontando campi chiave o usando hash.
  • Normalizzazione: uniformare formati (date, valute, unità di misura) e codifiche (UTF-8).
  • Validazione: verificare che i dati estratti siano completi e coerenti con lo schema atteso.

Per lo storage, le opzioni più comuni sono:

  • CSV/JSON: per dataset piccoli e analisi una tantum.
  • Database SQL (PostgreSQL, MySQL): per dati strutturati con relazioni, query complesse e integrità referenziale.
  • Database NoSQL (MongoDB): per dati semi-strutturati o con schema variabile, tipico dei dati scrappati da fonti diverse.
  • Data lake (S3, GCS): per grandi volumi di dati grezzi da elaborare successivamente.

Gestire il codice dello scraper con Git è essenziale: i selettori CSS e XPath cambiano frequentemente e avere una cronologia delle modifiche facilita il debug e il rollback.