Queste tre parole compaiono continuamente una accanto all’altra e vengono usate spesso come sinonimi. In realtà sono tre processi diversi, che risolvono compiti diversi e il più delle volte lavorano insieme — come anelli di una stessa catena. Vediamoli uno per uno, guardiamo come sono collegati e parliamo dei problemi tipici di ciascuno.
In estrema sintesi:
- Il crawling (scansione) — trova le pagine (percorre i link).
- Lo scraping — preleva dalla pagina i dati che servono.
- Il parsing — scompone il testo o il markup grezzo in una struttura comoda.
Parsing
Il parsing è l’analisi di dati secondo regole definite e la loro trasformazione dalla forma «grezza» a una strutturata.
La parola viene dall’informatica, dove il parser è il componente che legge una sequenza di caratteri (per esempio il codice sorgente di un programma, un JSON, un XML o un HTML) e ne costruisce una struttura comprensibile alla macchina: un albero, un oggetto, un insieme di campi.
Un esempio semplice. Abbiamo una stringa di HTML:
<div class="price">1.299 €</div>Il parser la trasforma in un albero di elementi (il DOM), sul quale si può «navigare» e chiedere: «dammi il contenuto dell’elemento con la classe price». In uscita non abbiamo più una sequenza di caratteri, ma un valore chiaro, 1.299 €, da cui poi si può ricavare il numero 1299.
Importante: il parsing, da solo, non scarica nulla da internet. Lavora con testo già disponibile. Si può fare il parsing di un file locale, della risposta di un’API o di una stringa ricevuta in un messaggio. Il parsing riguarda la struttura, non l’origine.
Scraping
Lo scraping (web scraping) è l’estrazione di dati specifici dalle pagine web.
Uno scraper fa due cose:
- Scarica la pagina (invia una richiesta HTTP e riceve l’HTML).
- Estrae da essa i dati che servono: prezzi, titoli, contatti, recensioni.
Ed è proprio nel secondo passaggio che lo scraper usa il parsing come strumento: per tirare fuori il prezzo da una pagina, prima bisogna farne il parsing. In altre parole, il parsing è una parte dello scraping, una sua fase interna, non un’alternativa a sé.
Lo scraping punta di solito a dati specifici di pagine specifiche. Compiti classici: raccogliere i prezzi dei concorrenti, scaricare un catalogo di prodotti, aggregare annunci, monitorare le notizie.
Crawling (scansione)
Il crawling è la scansione sistematica delle pagine seguendo i link.
Il crawler (detto anche ragno, bot, spider) parte da una o più pagine iniziali, vi trova tutti i link, li segue, scopre link nuovi — e così via. Il suo compito non è estrarre un campo specifico, ma scoprire e percorrere quante più pagine possibile.
L’esempio più noto di crawler sono i motori di ricerca. I bot di Google e Bing scandagliano internet senza sosta per sapere quali pagine esistono e poterle indicizzare.
Nei progetti reali crawling e scraping si combinano spesso: il crawler percorre il catalogo di un negozio online pagina dopo pagina e, su ogni pagina di prodotto trovata, parte lo scraper, che estrae prezzo, nome e caratteristiche — e al suo interno, a sua volta, fa il parsing dell’HTML per arrivare a quei dati.
Come si collega tutto
Il modo più comodo è immaginarlo come una catena di montaggio:
- Il crawling risponde alla domanda «quali pagine processare?»
- Lo scraping — «che cosa prelevare da quelle pagine?»
- Il parsing — «come trasformare il markup in dati?»
Si può fare parsing senza scraping (analizzare un file già pronto). Si può fare scraping senza un vero e proprio crawling (quando l’elenco delle pagine è già noto). E il crawling va quasi sempre in coppia con lo scraping — altrimenti percorrere le pagine non ha senso.
Sulla terminologia: come si usano questi termini in italiano
Vale la pena fermarsi un momento, perché in italiano convivono i termini inglesi, i loro adattamenti gergali e qualche traduzione — e non tutti coprono la stessa cosa.
Scraping. Per il processo completo di raccolta di dati dai siti web in modo automatizzato, la comunità italiana usa il termine inglese: web scraping o, semplicemente, scraping. Le perifrasi come «estrazione di dati dal web» funzionano da descrizione, non da termine: negli annunci di lavoro, nei forum tecnici e nella documentazione degli strumenti si legge «scraping», e la costruzione standard è «fare scraping di un sito». Nel parlato informale degli sviluppatori circola anche il verbo «scrapare» — gergale, ma capito da tutti.
Parsing. Parsare è un altro anglicismo ben radicato nel gergo degli sviluppatori italiani, ma con un significato più stretto e piuttosto fedele all’originale: analizzare contenuto già scaricato. Si parsa un JSON, un XML, un log, un HTML già ricevuto: «parsare la risposta dell’API», «il parser si inceppa su quell’HTML». Nota la sfumatura: chi fa parsing non scarica nulla — elabora testo che ha già a disposizione.
Crawling / scansione. È l’unico dei tre ad avere una traduzione italiana di uso corrente: scansione. L’ha consolidata il mondo SEO: la documentazione di Google in italiano parla di «scansione» e «indicizzazione», di «budget di scansione» (crawl budget) e di «crawler». Nella conversazione tecnica si alternano «scansionare» e il calco verbale «crawlare», quest’ultimo più informale.
Dov’è allora la confusione? Non tanto nelle parole quanto nel loro uso indistinto. Nel quotidiano, «fare scraping di un sito» funziona spesso da etichetta per l’intero processo — scansione, download e analisi compresi —, e non manca chi dice «parsare un sito» quando in realtà descrive uno scraping completo. In una chiacchierata informale nessuno si perde; ma quando scrivi documentazione, stimi un progetto o parli con un cliente, la precisione conviene: scraping = estrazione automatizzata di dati dalle pagine web, parsing = analisi del contenuto già scaricato, crawling/scansione = percorso delle pagine seguendo i link. E se lavori con la documentazione in inglese sei fortunato: i tre termini corrispondono quasi uno a uno a scraping, parsing e crawling.
I problemi del parsing
Il parsing sembra semplice finché il markup è pulito. In pratica danno fastidio queste cose.
- HTML «rotto». I browser sono molto indulgenti: mostrano la pagina anche se i tag non sono chiusi o sono annidati male. Il parser, invece, deve in qualche modo indovinare la struttura, e il risultato può essere inaspettato.
- Struttura che cambia. Hai scritto la regola «prendi il prezzo dall’elemento con la classe
price», un mese dopo il sito rinomina la classe — e tutto si rompe. Un parsing legato a un markup specifico è molto fragile. - Contenuto dinamico. Molti siti caricano i dati dopo il caricamento della pagina, via JavaScript. Nell’HTML iniziale i dati che servono semplicemente non ci sono: non c’è nulla da parsare finché la pagina non viene «renderizzata» in un browser vero.
- Codifiche. Una codifica rilevata male trasforma il testo in simboli illeggibili (il classico «mojibake»), e numeri e lettere vengono estratti con errori.
- Ambiguità. A volte dati con significati diversi hanno lo stesso markup e, senza regole aggiuntive, distinguerli è difficile.
I problemi dello scraping
Qui ai problemi del parsing si sommano le difficoltà legate al fatto che accediamo a un sito altrui attraverso la rete.
- Protezione anti-bot. I siti usano CAPTCHA, limitazione della frequenza delle richieste (rate limiting), blocchi per IP, analisi del comportamento. Uno scraper troppo attivo si becca presto un ban.
- Siti JavaScript. Se i dati vengono caricati dagli script, una richiesta normale non basta: serve un browser headless che esegua davvero il JS. È molto più lento e pesante.
- Fragilità e manutenzione. Il sito cambia il markup — lo scraper si rompe. Ogni scraper richiede una manutenzione costante: non è un «scrivi e dimentica».
- Trappole (honeypot). A volte nelle pagine vengono aggiunti apposta link o campi invisibili per una persona. L’umano non li nota, il bot li segue — e si tradisce.
- Questioni legali ed etiche. Le condizioni d’uso del sito (ToS), il diritto d’autore, i dati personali, il carico sui server altrui. Ciò che è tecnicamente possibile non sempre è ammissibile sul piano legale: va sempre verificato a parte.
robots.txt. Il file in cui il sito indica che cosa i bot possono e non possono percorrere. Lo si rispetta come minimo per cortesia (e spesso anche per ragioni legali ed etiche).
I problemi del crawling
Il crawling ha difficoltà tutte sue — nascono proprio dal fatto che il bot decide da solo quali link seguire, e la scala può diventare enorme.
Loop e «trappole per crawler»
È forse il problema più caratteristico del crawling.
- Cicli di link. La pagina A rimanda alla B, la B alla C e la C di nuovo alla A. Se il crawler non ricorda dove è già stato, girerà in tondo all’infinito. La soluzione di base: tenere l’elenco degli indirizzi (URL) già visitati e non tornarci una seconda volta.
- «Trappole» infinite (crawler trap). Peggio dei cicli semplici sono i casi in cui il sito genera indirizzi sempre nuovi. Esempi classici:
- Il calendario. Un widget con il pulsante «mese successivo» può portare all’infinito: il crawler continuerà a cliccare «avanti» fino al 2099 e oltre.
- Filtri e ordinamenti senza fine. Ogni combinazione di parametri nell’indirizzo (
?sort=price&color=red&page=2…) sembra una pagina nuova, anche se il contenuto è quasi lo stesso. E le combinazioni possibili sono un numero astronomico. - Identificatori di sessione nell’indirizzo. Se il sito inserisce nell’URL un
session idunivoco, la stessa pagina sembra ogni volta nuova, e l’elenco delle «visitate» non salva: gli indirizzi sono diversi. - Pagine duplicate. Lo stesso contenuto è raggiungibile da più indirizzi (con e senza slash finale, con e senza
www, con parametri diversi). Senza normalizzazione degli indirizzi il crawler spreca energie sulle stesse cose più e più volte.
Si risolve con la normalizzazione degli URL (riconduzione degli indirizzi a una forma unica), limiti di profondità della scansione, tetti al numero di pagine per dominio, la potatura delle sezioni che «proliferano» in modo sospetto e il riconoscimento delle trappole.
Scala e cortesia
- Volume. Internet (e perfino un singolo grande sito) è enorme. Bisogna decidere che cosa percorrere per primo (prioritizzazione) e non tentare di scaricare tutto indiscriminatamente.
- Carico sul server. Richieste troppo frequenti possono «stendere» un sito altrui. Per questo si introducono pause tra le richieste (crawl delay) e si limita il parallelismo: è il cosiddetto crawling «educato».
- Freschezza dei dati. Le pagine cambiano. Bisogna decidere con quale frequenza tornare a ricontrollare ciò che è già stato percorso, perché i dati non invecchino.
- Pagine invisibili. Parte del contenuto non si raggiunge con un semplice passaggio di link (dietro form, dietro autenticazione, nel «deep web»): lì il crawler da solo non arriva.
Riepilogo breve
| Processo | Che cosa fa | Domanda chiave | Problemi tipici |
|---|---|---|---|
| Crawling (scansione) | Percorre le pagine seguendo i link | «Quali pagine processare?» | Loop, trappole, scala, carico |
| Scraping | Scarica la pagina ed estrae i dati | «Che cosa prelevare dalla pagina?» | Protezione anti-bot, siti JS, fragilità, aspetti legali |
| Parsing | Scompone il markup in una struttura | «Come trasformare l’HTML in dati?» | HTML «rotto», markup che cambia, codifiche |
E la cosa principale da ricordare sulla terminologia: nel parlato di tutti i giorni «fare scraping» serve spesso da etichetta per l’intero processo di raccolta dati, ma, a rigore, lo scraping estrae i dati, il parsing analizza il markup già scaricato e il crawling (scansione) scopre le pagine. In una conversazione informale la differenza non pesa; quando scrivi documentazione o concordi un progetto, sì — e con le fonti in inglese giochi in casa, perché lì scraping, parsing e crawling significano esattamente questo.