Skip to main content
L’impaginazione è il livello di navigazione di uno scraper. Dopo aver recuperato, visualizzato ed estratto una pagina, deve rispondere a una domanda pratica: dove si trova il gruppo di record successivo e come capire quando non ne restano altri? La maggior parte degli errori deriva dal considerare ogni sito un elenco di pagine numerate. Un catalogo può invece usare parametri URL, un pulsante successivo, scorrimento infinito, “Carica altro”, un offset API o un token cursore opaco. Alcuni siti combinano più schemi.

Parti dalla richiesta, non dall’interfaccia

Prima di scrivere la logica, apri DevTools e osserva che cosa cambia passando al gruppo successivo.
  1. Apri la scheda Network e filtra Fetch/XHR.
  2. Fai clic sulla pagina successiva, scorri o premi “Carica altro”.
  3. Esamina URL, parametri della query, corpo della richiesta e risposta.
  4. Decidi se seguire link, interagire con la pagina o chiamare direttamente un endpoint API.
Usa l’interfaccia come indizio, ma considera decisiva la richiesta di rete. Un pulsante “Carica altro” potrebbe chiamare una semplice API con offset=40; un link potrebbe caricare i risultati con JavaScript dopo la modifica dell’URL.

Pagine numerate

È il caso più semplice, perché la posizione successiva è visibile nell’URL:
Lo scraper incrementa il numero e si arresta quando la risposta non contiene elementi, ne contiene meno del previsto o restituisce una pagina 404/vuota nota.
Controlla gli indici che iniziano da 0, parametri come p o start e siti che restituiscono nuovamente la prima pagina quando il numero è fuori intervallo. La ripetizione della prima pagina è peggiore di una pagina vuota, perché crea duplicati senza errori evidenti. Alcuni siti mostrano soltanto un link “Successiva” o una freccia. Se è una normale ancora, seguilo:
La protezione seen_urls è importante: alcuni siti configurati male fanno puntare l’ultimo link alla pagina corrente o alla prima. Verifica anche stati disabilitati come aria-disabled="true", disabled o una classe disabled.

Scorrimento infinito

Sembra un problema risolvibile solo nel browser, ma di solito utilizza un’API. Scorri una volta con DevTools aperto e cerca la richiesta che recupera il gruppo successivo; i parametri sono spesso offset, page, after, cursor o limit. Quando l’endpoint è utilizzabile, chiamalo direttamente:
Usa un browser soltanto quando autenticazione, parametri firmati o stato lato client rendono difficile chiamare l’API all’esterno della pagina.
Non affidarti soltanto all’altezza della pagina, che può cambiare per annunci, immagini o elenchi virtualizzati. Numero di elementi, inattività della rete e limite massimo di scorrimenti sono una combinazione più sicura.

Pulsanti Carica altro

Un pulsante Carica altro è uno scorrimento infinito controllato: la pagina attende un clic prima di richiedere il gruppo successivo. Lo scraper può quindi attendere, convalidare il nuovo numero di elementi e riprovare in caso di errore. Se il pulsante chiama un’API chiara, usa l’API; altrimenti fai clic in un ciclo browser:
Il controllo importante non è “il pulsante è stato premuto”, ma “sono comparsi nuovi record”. I pulsanti possono non rispondere, disabilitarsi o restare visibili dopo l’ultimo gruppo.

API con offset e cursore

I siti moderni gestiscono spesso l’impaginazione a livello API. L’offset richiede una posizione numerica:
Il cursore richiede il token opaco restituito dalla risposta precedente:
Il cursore è più stabile quando i record vengono aggiunti o rimossi durante lo scraping: anziché “salta le prime 40 righe”, indica “continua dopo questa posizione nota”.
Gestisci consapevolmente i limiti di frequenza: rispetta Retry-After, riprova gli errori temporanei con backoff e salva l’avanzamento se ricominciare dalla prima pagina sarebbe costoso.

Impaginazione ibrida

I siti reali combinano spesso più schemi:
  • Una categoria ha pagine numerate, ma ogni pagina carica altri prodotti durante lo scorrimento.
  • Una ricerca inizia con Carica altro e poi passa ai link numerati.
  • Un’interfaccia a schede ha impaginazioni separate per “Nuovi”, “Popolari” e “In offerta”.
  • Una pagina di elenco impagina gli URL dei risultati e ogni dettaglio ha recensioni o commenti a loro volta impaginati.
Gestiscili come cicli annidati. Il ciclo esterno controlla l’unità di navigazione più ampia e ogni ciclo interno una singola azione ripetuta. Traccia ID univoci per tutta l’esecuzione per evitare duplicati nell’output.

Misure di sicurezza pratiche

  • Definisci un segnale di arresto. Risultati vuoti, link successivi assenti, pulsanti disabilitati, hasNextPage: false, cursori ripetuti e limiti massimi di iterazione sono tutti validi.
  • Rileva i duplicati. Scorrimento infinito e API con cursore possono ripetere record se i dati cambiano durante l’esecuzione. Conserva ID stabili o URL canonici.
  • Regola la navigazione. Aggiungi brevi attese casuali tra i gruppi. L’automazione deve attendere modifiche dei contenuti, non soltanto timeout fissi.
  • Registra gli errori. Se una pagina non riesce dopo più tentativi, registra URL o cursore e continua quando possibile.
  • Preferisci le API quando sono legittime e stabili. L’impaginazione API diretta è solitamente più veloce e facile da convalidare del controllo di un browser.
  • Usa uno strumento visuale quando la velocità conta più del codice personalizzato. In Octoparse, i comuni flussi con pagina successiva, Carica altro e scorrimento infinito si configurano visivamente e si eseguono in locale o nel cloud.
L’impaginazione non significa soltanto “vai alla pagina successiva”: è il ciclo di controllo dello scraper. Con una logica chiara per il passaggio successivo, una condizione di arresto affidabile e protezione dai duplicati, lo scraper può attraversare il sito senza fermarsi silenziosamente alla prima pagina né continuare all’infinito.