Home/ Wiki/ Siti Web/ Web Scraping

Web Scraping Etico

Raccogliere dati dal web senza fare danni e senza finire nei guai: strumenti Python, robots.txt, GDPR, e quando invece conviene chiedere l'API.

Estrazione e raccolta di dati strutturati dal web
Indice dei contenuti
Aggiornato: Aprile 2026 9 min di lettura

Cos'è il web scraping

Il web scraping è l'estrazione automatica di dati dalle pagine web: un programma visita le pagine, legge il codice HTML e tira fuori quello che gli serve, testi, prezzi, link, immagini. La parte tecnica si impara in un pomeriggio; la parte che richiede giudizio è decidere cosa è lecito prendere, con che frequenza, e cosa farne.

Punti chiave

  • Lo scraping estrae dati dal contenuto visibile delle pagine, a differenza delle API che li forniscono in modo strutturato e autorizzato.
  • L'etica dello scraping si fonda su tre pilastri: rispetto del robots.txt, rate limiting moderato e identificazione trasparente del crawler.
  • La legalità dipende da cosa si raccoglie (dati personali, contenuti protetti) e dai Termini di servizio del sito: il GDPR si applica sempre ai dati personali.
  • Prima di scrivere uno scraper, verifica sempre se esiste un'API ufficiale: è più stabile, legale e a bassa manutenzione.
  • I dati grezzi vanno sempre puliti, deduplicati e normalizzati prima di poter essere usati per analisi o marketing.

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. La scelta dello strumento dipende dalla scala del progetto e dal tipo di sito: per poche pagine statiche basta una libreria leggera, mentre per crawling su larga scala o siti dinamici servono framework e browser automatizzati. Conoscere questa distinzione ti evita di sovradimensionare progetti semplici o di scegliere strumenti inadeguati per quelli complessi.

BeautifulSoup

Libreria leggera per leggere HTML e XML. Va bene per i progetti semplici e le pagine statiche, si usa insieme a requests per scaricare e ai selettori CSS per trovare gli elementi. È il punto da cui far partire chi impara: la sintassi si capisce subito e gli errori si vedono. Da sola non gestisce concorrenza, ritentativi e contenuti caricati con JavaScript.

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 indica un Crawl-delay, le richieste vanno rallentate: dall'altra parte c'è un server che qualcuno paga, e un ciclo senza pause somiglia in tutto a un piccolo attacco. Una pausa di un secondo fra le richieste non ti cambia la vita e cambia la loro.

  • 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

Fatto con criterio, lo scraping ha usi del tutto legittimi:

  • 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 scrivere uno scraper, guarda se il sito ha un'API ufficiale. Se c'è, si usa quella:

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. Per chi lavora nel marketing e nell'analisi dati, investire qualche ora nella lettura della documentazione di un'API ufficiale ripaga sempre rispetto allo scraping: si ottiene un flusso dati prevedibile, integrabile in dashboard e automazioni, senza il rischio che un restyling del sito mandi in tilt l'intera pipeline.

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.

Dove salvare i dati raccolti:

  • 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.

Tieni il codice dello scraper sotto Git: i selettori si rompono ogni volta che il sito di destinazione cambia qualcosa, e avere la cronologia è l'unico modo per capire se è cambiato il sito o il tuo codice.

Vuoi imparare ad applicarlo davvero?

Scopri i corsi e la formazione di Federico Boggia su AI, dati e digitale.

Vai ai corsi
Federico BoggiaRispondo io, in giornata

Ciao! Dimmi che ti serve: un corso online, una giornata in aula a Livorno o la formazione per la tua azienda.

Scrivimi su WhatsApp