Estrarre dati strutturati da una pagina web continua a essere un’attività piuttosto scomoda da mettere in pratica. Per anni le alternative sono rimaste grosso modo due: scrivere uno script con librerie come Beautiful Soup, Scrapy o strumenti analoghi, oppure affidarsi a soluzioni visuali che spesso spostano l’elaborazione su server esterni. PageSieve offre una soluzione estremamente efficace e subito utilizzabile: trasforma Firefox in un piccolo ambiente di web scraping visuale, nel quale si indicano con il mouse gli elementi da acquisire e si costruisce una configurazione riutilizzabile basata su selettori CSS o XPath. Il progetto è open source, distribuito con licenza MIT e distribuito a costo zero sotto forma di Mozilla Add-on.
PageSieve non serve soltanto a trovare l’espressione che identifica un elemento della pagina web: consente di assegnargli un nome, stabilire cosa estrarre, creare gruppi di campi, seguire la paginazione e infine esportare i risultati.
La configurazione può inoltre essere salvata e riutilizzata: una sessione di scraping preparata manualmente una volta può diventare una sorta di “ricetta” applicabile di nuovo allo stesso sito.
PageSieve: web scraping nella barra laterale di Firefox
Dopo l’installazione, PageSieve lavora attraverso una barra laterale del browser.
L’utente definisce un campo – per esempio “Titolo”, “Prezzo”, “URL” o “Data” – quindi attiva il selettore visuale e indica l’elemento corrispondente nella pagina. Dietro questa operazione apparentemente semplice entra in gioco un algoritmo derivato da SelectorGadget, adattato dal progetto per suggerire selettori CSS utili a identificare gli elementi desiderati.
Non si resta però vincolati alla selezione automatica. PageSieve permette di inserire manualmente espressioni CSS e XPath, possibilità importante quando la struttura HTML non consente di ottenere un selettore sufficientemente stabile con un semplice clic. Chi ha già esperienza con il DOM (Document Object Model) della pagina può quindi usare l’interfaccia visuale come punto di partenza e poi rifinire le espressioni.

Ogni campo può operare in 3 modalità:
- single: recupera un singolo elemento;
- multiple: gestisce una raccolta di elementi;
- count: restituisce il numero di corrispondenze trovate.
È possibile estrarre il testo oppure leggere un attributo HTML, come href, src o data-id. Il motore può anche acquisire proprietà DOM quali innerHTML, outerHTML, innerText e textContent.
Se si vuole raccogliere il titolo visibile di un articolo basta il testo; per ottenere il collegamento originale serve invece l’attributo href dell’elemento <a>. In altri casi può risultare utile conservare il markup interno, magari perché una successiva elaborazione dovrà interpretare tag, collegamenti o altre informazioni presenti nell’HTML.

Campi multipli e dati annidati: non solo una colonna alla volta
Uno scraper visuale diventa realmente interessante quando riesce a comprendere la struttura ripetitiva delle pagine.
PageSieve permette di impostare un container selector, cioè il selettore dell’elemento che racchiude ciascun record: all’interno del contenitore si definiscono poi i relativi campi.
Immaginiamo una pagina con decine di prodotti: ogni prodotto compare dentro un elemento article o div e contiene nome, prezzo e collegamento alla scheda. Invece di cercare separatamente tutti i nomi, tutti i prezzi e tutti gli URL, si può definire il contenitore del singolo prodotto e aggiungere tre campi relativi al suo interno. Il risultato mantiene così la relazione fra i valori appartenenti allo stesso elemento.
La configurazione supporta anche sotto-campi ricorsivi quando un campo usa la modalità “multiple”. È una caratteristica utile per pagine che contengono strutture annidate, anche se la documentazione dell’interfaccia segnala ancora qualche limite: per i sotto-campi, per esempio, alcune funzioni di estrazione risultano meno complete rispetto ai campi principali.
Le ricette di scraping sono file JSON
Uno degli aspetti più interessanti riguarda la separazione fra interfaccia e definizione del lavoro: una configurazione PageSieve non rimane una sequenza opaca di clic memorizzata dall’estensione bensì assume la forma di una struttura dati validata mediante Zod e può essere esportata in JSON.
Lo schema attuale usa schemaVersion "2.0.0" e assegna alla configurazione un identificatore, una revisione, l’URL iniziale, eventualmente un urlPattern, date di creazione e modifica, selettori, opzioni di estrazione e regole di paginazione. Si possono inoltre aggiungere nome, descrizione, autore e tag.
Ogni campo conserva a sua volta nome, selettore, tipo di estrazione, eventuale attributo o proprietà DOM, valore predefinito e tipo di dato. PageSieve prevede conversioni verso string, number, boolean e date.
Il formato JSON diventa quindi una descrizione dichiarativa dello scraping: non contiene necessariamente una procedura scritta passo per passo, ma specifica quali dati cercare e come recuperarli. A questo punto, le configurazioni possono essere salvate nello storage del browser, esportate su file, importate in seguito oppure condivise. Per attività ripetitive è molto più pratico rispetto a ricostruire ogni volta i selettori a mano.

Come funziona la paginazione
Raccogliere i dati dalla pagina aperta è relativamente semplice. Il problema vero nasce quando il sito contiene decine o centinaia di pagine. PageSieve affronta la questione con tre meccanismi di paginazione:
- “next” usa un selettore CSS o XPath per individuare il pulsante o il collegamento che conduce alla pagina successiva. È il caso classico delle interfacce con “Avanti” o con una freccia. Si può impostare un numero massimo di pagine, così da evitare che una configurazione errata continui a navigare senza un limite ragionevole.
- “links” riceve invece un elenco esplicito di URL. Risulta comoda quando gli indirizzi da elaborare sono già noti o provengono da una precedente raccolta.
- “template” genera gli URL sostituendo il segnaposto
{{page}}con numeri progressivi: per esempio una struttura del tipopagina={{page}}può partire da 1 e incrementare il valore a ogni iterazione.
Il motore gestisce anche un caso meno immediato: le Single Page Application. Quando il clic sul pulsante successivo modifica il contenuto senza un caricamento tradizionale della pagina, la macchina a stati può calcolare un hash della pagina prima e dopo l’azione per capire se la navigazione ha realmente prodotto un nuovo stato da elaborare.
Una macchina a stati controlla navigazione, tentativi ed errori
PageSieve utilizza XState e definisce una macchina a stati che governa estrazione, paginazione, attese, retry e completamento.
Una pagina può impiegare tempo a completare il caricamento; un selettore può comparire dopo una richiesta JavaScript; un clic può non produrre subito la navigazione prevista; un tentativo può fallire e dover essere ripetuto. Formalizzare questi passaggi in stati e transizioni rende più semplice capire cosa deve accadere dopo ogni operazione.
Le opzioni di estrazione mostrano bene il livello di controllo previsto: la configurazione include, fra gli altri parametri, waitForSelector, scrollToBottom, pageDelayMs, timeoutMs e maxRetries. I valori predefiniti documentati indicano 3.000 millisecondi di ritardo dopo la navigazione, timeout di 60.000 millisecondi e due nuovi tentativi in caso di errore.
È presente anche l’opzione waitforNetworkIdle, attiva per impostazione predefinita nei client browser.
La parte forse più interessante per chi vuole superare l’utilizzo occasionale nel browser compare nel repository del progetto: PageSieve include anche una CLI basata su Crawlee: l’autore ne suggerisce l’utilizzo quando bisogna elaborare un numero elevato di pagine. Si prepara visivamente la ricetta dentro Firefox, dove individuare e verificare i selettori risulta molto più comodo; in seguito la stessa definizione può alimentare un’esecuzione automatizzata.
Quando PageSieve può essere davvero utile
PageSieve è particolarmente adatto ai campi applicativi che risiedono tra il copia-incolla manuale e uno scraper sviluppato interamente in codice. Può servire per raccogliere cataloghi, tabelle distribuite su più pagine, elenchi pubblici, risultati di ricerca, schede prodotto o archivi di documenti, soprattutto quando la struttura HTML segue regole abbastanza costanti.
Per un tecnico ha anche un’altra utilità: consente di prototipare rapidamente una strategia di estrazione. In pochi minuti si verifica se determinati selettori recuperano davvero i dati desiderati e si esporta la configurazione. Solo dopo, se il lavoro cresce, si decide se mantenere PageSieve, passare alla CLI o costruire una soluzione personalizzata.
PageSieve non sostituisce Playwright, Selenium o crawler programmabili quando servono autenticazioni elaborate, interazioni complesse, gestione sofisticata delle sessioni o trasformazioni personalizzate dei dati. L’obiettivo di PageSieve è differente e consiste nel rendere dichiarativo e riutilizzabile uno scraping preparato visualmente, senza costringere l’utente a scrivere uno script per ogni attività.
Per lavori piccoli e medi, e soprattutto per chi sa cosa sono CSS e XPath ma non vuole costruire ogni volta tutta l’infrastruttura attorno all’estrazione, è una soluzione davvero efficace e semplice da usare.
PageSieve non elimina i problemi tipici dello scraping web
L’interfaccia visuale di PageSieve semplifica la creazione di uno scraper, ma non rende stabile una pagina che stabile non è. Classi CSS generate dinamicamente, modifiche frequenti del markup, lazy loading, virtualizzazione delle liste, componenti dentro shadow DOM, CAPTCHA e sistemi anti-bot possono mettere in crisi qualunque ricetta basata sulla struttura della pagina.
Conviene privilegiare selettori robusti: identificatori semantici, attributi relativamente stabili e relazioni DOM che abbiano poche probabilità di cambiare.
Una classe come .product-card, ad esempio, può essere molto più affidabile di una catena costruita copiando l’intero percorso div:nth-child(…). XPath relativo e container selector aiutano parecchio quando la pagina presenta gruppi ripetitivi.
C’è poi la questione legale e operativa. Il fatto che il browser possa visualizzare un dato non implica automaticamente che si possa raccoglierlo senza limiti, soprattutto quando entrano in gioco termini di servizio, informazioni personali, autenticazione o volumi elevati di richieste. Anche dal punto di vista tecnico è opportuno evitare frequenze aggressive: uno scraper ben progettato deve rispettare i server che interroga.
Il Garante Privacy italiano ha a suo tempo chiarito quando è legale usare lo scraping e quando non è consentito.