Vai al contenuto
Offerte

PageSieve, l’estensione Firefox per lo scraping senza codice

In questo articolo Indice dei contenuti 3 sezioni

PageSieve è un’estensione per Firefox che trasforma il browser in un piccolo laboratorio di web scraping visuale, senza chiedere una riga di codice. Il meccanismo è quello che molti hanno sognato mentre copiavano a mano prezzi e titoli da una pagina: si clicca con il mouse sugli elementi che interessano, l’estensione suggerisce il selettore corrispondente e il risultato diventa una configurazione riutilizzabile. Il progetto è open source, licenza MIT, disponibile a costo zero come Mozilla Add-on.

Fino a oggi le strade erano due, entrambe scomode. Scrivere uno script con librerie come Beautiful Soup o Scrapy, quindi mettersi a programmare. Oppure affidarsi a piattaforme visuali che però spostano l’elaborazione su server esterni, con tutto quello che comporta in termini di controllo sui dati. PageSieve sta in mezzo e lavora dentro il browser, in una barra laterale.

Come si costruisce un’estrazione dentro la barra laterale

Il flusso di lavoro è lineare. Si definisce un campo, per esempio “Titolo”, “Prezzo”, “URL” o “Data”, si attiva il selettore visuale e si indica l’elemento sulla pagina. Dietro le quinte agisce un algoritmo derivato da SelectorGadget, riadattato per proporre selettori CSS ragionevolmente stabili.

Chi vuole più controllo non resta prigioniero della selezione automatica: si possono inserire a mano espressioni CSS e XPath, cosa preziosa quando il markup è così caotico che un semplice clic non basta. Chi conosce il DOM può usare l’interfaccia come punto di partenza e poi limare le espressioni.

Ogni campo funziona in tre modalità: single per un singolo elemento, multiple per una raccolta, count per contare le corrispondenze trovate. Si estrae il testo visibile oppure si legge un attributo HTML come href, src o data-id. Il motore acquisisce anche proprietà DOM tipo innerHTML, outerHTML, innerText e textContent. Serve il link originale di un articolo? Basta l’attributo href. Serve conservare il markup interno per un’elaborazione successiva? Si prende innerHTML. Il pezzo davvero interessante è il container selector, cioè il selettore dell’elemento che racchiude ogni singolo record. Su una pagina con decine di prodotti, invece di raccogliere separatamente tutti i nomi, tutti i prezzi e tutti gli indirizzi, si indica il contenitore del prodotto e si aggiungono i campi al suo interno. Così la relazione fra i valori dello stesso elemento non si perde. Sono previsti anche campi annidati in modalità multiple, con qualche funzione di estrazione ancora meno completa rispetto ai campi principali, come segnala la documentazione stessa.

Ricette in JSON, paginazione e una macchina a stati

Una configurazione PageSieve non è una sequenza opaca di clic memorizzata dall’estensione. È una struttura dati validata con Zod ed esportabile in JSON. Lo schema attuale usa schemaVersion “2.0.0” e contiene identificatore, revisione, URL iniziale, eventuale urlPattern, date di creazione e modifica, selettori, opzioni di estrazione e regole di paginazione. Si possono aggiungere nome, descrizione, autore e tag. Ogni campo porta con sé selettore, tipo di estrazione, attributo o proprietà DOM, valore predefinito e tipo di dato, con conversioni verso string, number, boolean e date. Le ricette si salvano nello storage del browser, si esportano su file, si importano e si condividono.

Sulla paginazione ci sono tre strategie. La modalità next individua con un selettore il pulsante o il link verso la pagina successiva, con un numero massimo di pagine impostabile per evitare navigazioni infinite. La modalità links accetta un elenco esplicito di indirizzi già noti. La modalità template genera gli URL sostituendo il segnaposto {{page}} con numeri progressivi. Gestite anche le Single Page Application: quando il clic cambia il contenuto senza ricaricare, la macchina a stati calcola un hash della pagina prima e dopo per capire se qualcosa è davvero cambiato. Quella macchina a stati è costruita con XState e governa estrazione, attese, tentativi ripetuti ed errori. Fra i parametri disponibili ci sono waitForSelector, scrollToBottom, pageDelayMs, timeoutMs e maxRetries. I valori predefiniti documentati parlano di 3.000 millisecondi di ritardo dopo la navigazione, timeout di 60.000 millisecondi e due nuovi tentativi in caso di problemi. L’opzione waitforNetworkIdle è attiva per impostazione predefinita nei client browser.

Dove conviene e dove invece no

Nel repository c’è anche una CLI basata su Crawlee, suggerita dall’autore quando le pagine da elaborare diventano molte: la ricetta si prepara visivamente in Firefox, dove verificare i selettori è comodo, poi la stessa definizione alimenta un’esecuzione automatizzata. Il terreno naturale di PageSieve sta fra il copia e incolla manuale e uno scraper scritto interamente in codice: cataloghi, tabelle su più pagine, elenchi pubblici, risultati di ricerca, schede prodotto, archivi di documenti, purché la struttura HTML sia abbastanza regolare. Utile anche per prototipare in pochi minuti una strategia di estrazione e decidere solo dopo se restare qui o costruire altro. Non sostituisce Playwright, Selenium o crawler programmabili quando servono autenticazioni complicate, gestione sofisticata delle sessioni o trasformazioni personalizzate dei dati. E l’interfaccia visuale non rende stabile una pagina che stabile non è: classi CSS generate dinamicamente, markup che cambia spesso, lazy loading, liste virtualizzate, componenti dentro shadow DOM, CAPTCHA e sistemi antibot possono mandare in crisi qualunque ricetta basata sulla struttura della pagina.

Condividi:
16 Condivisioni