Formati e fonti di dati 5 min di lettura

Parsing di documenti: formati, librerie e approcci

Panoramica del parsing di documenti: PDF, Word, Excel, presentazioni e scansioni, con le librerie e gli approcci che funzionano per ogni formato.

TW
Team Web-Scraping.it
Raccolta dati per le esigenze del business
Pubblicato il 28 febbraio 2025

Il parsing di documenti è l’estrazione di dati strutturati da file di formati diversi e la loro trasformazione in una forma comoda per l’elaborazione successiva: il caricamento in un database, l’esportazione in una tabella, il passaggio a un sistema di analisi o a un’altra piattaforma. In pratica il compito non si limita quasi mai a un solo formato: il listino arriva in Excel, l’esportazione dal CRM in CSV, il contratto in PDF, i dati di un servizio esterno in JSON o XML, e la mappa del sito da percorrere prima della raccolta dei dati è in formato sitemap.

Questo è un articolo panoramico. Qui esaminiamo la logica di lavoro con ogni tipo di file, mostriamo esempi minimi in vari linguaggi e rimandiamo ai materiali specializzati in cui ogni formato è analizzato in dettaglio. Se ti serve una soluzione per un compito concreto, invece di studiare da solo — offriamo servizi di estrazione ed elaborazione dati chiavi in mano.

Di che cosa è fatto il parsing di qualsiasi documento

Indipendentemente dal formato, il processo si compone quasi sempre di tre passaggi. Prima viene la lettura — ottenere i byte del file da una cartella locale, da un URL o da uno stream. Poi l’analisi della struttura — trasformare il contenuto «grezzo» in oggetti del linguaggio di programmazione: un albero di nodi, una lista di righe, una tabella. E infine l’estrazione e la normalizzazione — selezionare i campi necessari, ripulire dalla spazzatura, sistemare i tipi (date, numeri, valute) ed esportare il risultato.

La difficoltà si sposta tra questi passaggi a seconda del formato. Nei dati rigorosamente strutturati come JSON o XML il lavoro pesante è già stato fatto per te: esiste una grammatica formale e il parser costruirà l’albero in modo garantito. Nei formati poco strutturati — PDF, log, file di testo arbitrari — la maggior parte dello sforzo ricade proprio sul terzo passaggio: i dati bisogna «tirarli fuori» con euristiche ed espressioni regolari.

Formati di dati strutturati

JSON

JSON è il formato di scambio dati più diffuso tra i servizi e la risposta principale della maggior parte delle API. Si proietta direttamente sulle strutture del linguaggio: un oggetto diventa un dizionario (o array associativo), un array una lista. Per questo il parsing si riduce a una singola chiamata della libreria standard, e il lavoro vero comincia dopo, nel percorrere le strutture annidate. L’analisi dettagliata, con la gestione dell’annidamento, la lettura in streaming dei file grandi e gli errori tipici, è nell’articolo dedicato al parsing di JSON.

python
import json

with open("data.json", encoding="utf-8") as f:
    data = json.load(f)

print(data["items"][0]["name"])

XML

XML è organizzato come un albero di nodi con tag, attributi e testo. È più rigoroso e verboso di JSON, ma proprio su di esso sono costruiti moltissimi standard di settore: esportazioni dei marketplace, formati bancari, interscambio industriale di dati. Per l’analisi si usa o l’approccio in streaming (quando il file è grande), o la costruzione dell’albero in memoria con la navigazione via XPath. Dettagli, librerie ed esempi nel materiale sul parsing di XML.

RSS e Atom

RSS è un caso particolare di XML con uno schema fisso per i feed di notizie, blog e podcast. Tecnicamente si può analizzare con qualsiasi parser XML, ma in pratica sono più comode le librerie specializzate, che restituiscono subito l’elenco delle voci con titoli, date e link. I dettagli nell’articolo sul parsing di RSS.

Sitemap (mappa del sito)

La sitemap è un altro formato XML: descrive l’elenco degli URL di un sito per i motori di ricerca e i crawler. Prima di raccogliere dati da un sito grande, la mappa si percorre quasi sempre per prima: fornisce un elenco già pronto di pagine, a volte con date di aggiornamento e priorità, ed evita l’esplorazione alla cieca dei link. Come leggere le mappe semplici e quelle annidate (sitemap index), tenere conto di lastmod e lavorare con le versioni gzip — nell’articolo sul parsing delle sitemap.

Formati tabellari

CSV

CSV è un semplice formato di testo: «righe e colonne separate da una virgola (o da un altro carattere)». Nonostante l’apparente banalità, è proprio qui che nascono più insidie pratiche: separatori diversi, virgolette dentro i valori, a capo nelle celle, codifiche e BOM. Per questo un parsing fatto in casa «con lo split sulla virgola» è quasi sempre un errore: serve un lettore CSV completo. L’analisi di queste trappole è nell’articolo sul parsing di CSV.

python
import csv

with open("prices.csv", encoding="utf-8", newline="") as f:
    for row in csv.DictReader(f):
        print(row["sku"], row["price"])

Excel (XLSX, XLS)

Excel non è più testo, ma un formato binario (o, nel caso di XLSX, impacchettato in ZIP) con fogli, formule, formati di cella e aree unite. Qui non si può semplicemente leggere il file come righe: servono librerie che capiscano la struttura interna della cartella di lavoro. Spesso conviene prima convertire il listino o il report originale in CSV e poi elaborarlo in modo uniforme. Come leggere fogli, celle unite e valori delle formule — nel materiale sul parsing di Excel.

Formati poco strutturati

PDF

PDF è un formato pensato per la stampa e la visualizzazione, non per l’archiviazione di dati, e per questo è il più difficile da cui estrarre informazioni in modo affidabile. Il testo di un PDF può essere «vero» (selezionabile) oppure un’immagine che richiede l’OCR; le tabelle non sono salvate come tabelle, ma come un insieme di linee e blocchi di testo con coordinate. Quali librerie estraggono il testo, quali le tabelle e quando non si può fare a meno del riconoscimento delle immagini — tutto nell’articolo sul parsing di PDF.

HTML

HTML è strutturalmente vicino a XML, ma in pratica è quasi sempre «sporco»: tag non chiusi, markup superfluo, contenuti dinamici. È il formato principale nella raccolta di dati dai siti web — estrazione di testi, link, prezzi e contatti. La panoramica dei parser, dei selettori CSS e del lavoro con i link — nell’articolo sul parsing di HTML.

TXT e log

I file di testo arbitrari (.txt) e i log dei server non hanno alcuno schema comune: il loro formato lo definisce chi ha creato il file. Qui gli strumenti principali sono la lettura riga per riga e le espressioni regolari. I log sono un caso così particolare e importante da meritare un articolo a parte; l’approccio generale all’analisi del testo è descritto nel materiale sul parsing di TXT.

Quale linguaggio e quale stack scegliere

Non esiste una scelta «giusta» in assoluto, ma esiste una prassi consolidata. Python è lo standard di fatto per il parsing: librerie ricche per tutti i formati (pandas, lxml, openpyxl, pdfplumber) e un minimo di codice. JavaScript/Node.js è comodo quando il parsing è integrato in un progetto web o serve il rendering dei contenuti dinamici nel browser. PHP si sceglie spesso se i dati finiscono direttamente in un sito costruito su quello stack. Go si usa per la velocità e per l’elaborazione in parallelo di grandi volumi. In ogni articolo specializzato riportiamo esempi in più linguaggi, così puoi prendere quello più vicino al tuo progetto.

Tutti questi stack hanno una cosa in comune: è il formato a dettare la libreria, non il contrario. Perciò conviene partire dall’individuare con esattezza il formato dei file di origine — e passare poi all’articolo corrispondente: JSON, XML, RSS, sitemap, CSV, Excel, PDF, HTML, TXT o log.