Salta al contenuto

Bypassare i blocchi di web scraping con Node-Unblocker

Ehilà!

Quindi hai creato un fantastico web scraper con Node.js, ma i siti continuano a bloccare le tue richieste? Siamo stati tutti lì!

In questa guida completa di oltre 3000 parole, imparerai come sfruttare Node-Unblocker per eludere i blocchi e raschiare qualsiasi sito.

Cos'è Node-Unblocker e perché usarlo?

Node-Unblocker è un modulo Node.js open source che consente di eseguire un server proxy con middleware personalizzati per modificare richieste e risposte.

Ecco alcuni dei motivi principali per cui Node-Unblocker è così utile per il web scraping:

  • Evita i blocchi IP – Instradando il tuo scraper attraverso i proxy, puoi evitare di ottenere il ban dell'IP a causa di troppe richieste da un indirizzo IP. Questo è fondamentale per il successo della raschiatura su larga scala.

  • Bypassare i blocchi geografici – Molti siti limitano l’accesso ai contenuti in base alla posizione. Con Node-Unblocker, puoi eseguire il proxy tramite IP in regioni specifiche per aggirare questi blocchi.

  • Raschiare siti JavaScript – Node-Unblocker supporta il proxy websocket che consente lo scraping di siti che fanno molto affidamento su JavaScript. Molti scraper hanno problemi con i siti JS.

  • Modifica richieste – I middleware personalizzati ti consentono di modificare le intestazioni delle richieste per imitare i browser, gestire automaticamente l'accesso, codificare i caratteri e altro ancora.

  • Trasformare le risposte – Rimodella ed elabora le risposte utilizzando i middleware di risposta prima che raggiungano il tuo codice scraper.

  • Leggero e veloce – Node-Unblocker è costruito interamente in JavaScript, quindi è velocissimo e facile da integrare nel tuo scraper JS.

Secondo i sondaggi, oltre il 60% dei siti Web ora utilizza misure anti-scraping come il blocco degli IP, i CAPTCHA e il rilevamento dei bot. Node-Unblocker è la tua arma segreta per superare questi ostacoli.

Installazione e configurazione di Node-Unblocker

Vediamo prima come installare e configurare Node-Unblocker. Creeremo anche un server proxy di esempio per provarlo.

Passaggio 1: installa Node-Unblocker

Supponendo che tu abbia già un progetto Node.js, installa Node-Unblocker ed Express:

npm install node-unblocker express

Questo aggiungerà entrambi i moduli al tuo package.json.

Passaggio 2: inizializzare Express Server

Nel file del server, inizializza un'app Express e un'istanza di Node-Unblocker:

// server.js

const express = require(‘express‘);
const Unblocker = require(‘unblocker‘);

const app = express();
const unblocker = Unblocker(); 

// Node-Unblocker is now ready to use!

Passaggio 3: aggiungi percorso proxy

Per le richieste proxy, aggiungi un percorso che reindirizza attraverso il middleware Unblocker:

app.get(‘/scrape‘, (req, res) => {
  const url = req.query.url;

  res.redirect(`/proxy/${url}`); 
});

Ora possiamo fare richieste a /scrape?url=http://example.com e Node-Unblocker li proxyrà.

Passaggio 4: avviare il server

Infine, avvia il server proxy:

const PORT = 3000;

app.listen(PORT, () => {
  console.log(`Proxy server running on port ${PORT}`);
});

Il nostro server Node-Unblocker di base è ora attivo e funzionante!

Successivamente diamo un'occhiata a come possiamo sfruttarlo nei nostri web scraper.

Utilizzo di Node-Unblocker per il Web Scraping

Ecco alcuni dei casi d'uso più comuni per l'utilizzo di Node-Unblocker per raschiare siti:

Proxy rotanti

Una delle maggiori sfide nel web scraping è evitare di essere bloccati dal sito di destinazione dopo aver effettuato troppe richieste da un IP.

Node-Unblocker fornisce un modo semplice per implementare una soluzione proxy a rotazione.

I passi sono i seguenti:

  1. Ottieni l'accesso a un pool di server proxy: puoi utilizzare un provider come Luminati or Oxylab per ottenere centinaia di IP proxy.

  2. Aggiungi i proxy a un elenco – Ad esempio:

const proxies = [
  ‘http://proxy1.com‘,
  ‘http://proxy2.com‘,
  // etc
];
  1. Prima di ogni richiesta, seleziona casualmente un proxy:
function getRandomProxy() {
  return proxies[Math.floor(Math.random() * proxies.length)];
}
  1. Effettua la richiesta di web scraping tramite proxy:
const proxy = getRandomProxy();

request(`${proxy}/targetUrl`);

Ruotando i proxy per ogni richiesta, puoi eseguire operazioni su larga scala senza essere bloccato. Suggerimento professionale: utilizza un pool proxy almeno 10 volte più grande della velocità delle tue richieste al secondo.

Bypassare i blocchi geografici

Alcuni siti Web limitano l'accesso ai contenuti in base alla posizione geografica del visitatore.

Ad esempio, il sito http://usanews.com consente solo il traffico proveniente da IP degli Stati Uniti. Utilizzando Node-Unblocker, possiamo facilmente aggirare questa restrizione.

I passi sono i seguenti:

  1. Ottieni IP proxy residenziali per la tua regione di destinazione, ad esempio gli Stati Uniti.

  2. Aggiungi questi proxy specifici della regione a Node-Unblocker.

  3. Instrada il traffico del tuo scraper attraverso Node-Unblocker.

Ora tutte le richieste appariranno provenienti dalla regione richiesta e accederanno con successo ai contenuti geobloccati!

Questa tecnica funziona anche per simulare il traffico mobile da un paese specifico, utile per lo scraping di app mobili mirate alla regione.

Raschiare siti Web JavaScript

I siti moderni fanno molto affidamento su JavaScript per eseguire il rendering dei contenuti. Gli scraper convenzionali che scaricano solo HTML hanno difficoltà ad analizzare queste pagine interattive.

Per fortuna, Node-Unblocker esegue il proxy dei websocket per impostazione predefinita, consentendo lo scraping dei siti JS:

// Enable websocket proxying
unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade); 

// Make request and JS will execute
request(‘http://jsSite.com‘);  

Il sito caricherà ed eseguirà JS in modo simile a un browser consentendo l'estrazione corretta dei dati.

Tuttavia, funziona bene solo per i siti JavaScript pubblici. Per un rendering JS robusto, uno strumento come burattinaio è invece consigliato.

Applicazione di middleware di richiesta personalizzata

Una delle funzionalità più potenti di Node-Unblocker sono i suoi middleware personalizzati. Possiamo usarli per modificare sia le richieste che le risposte.

Alcuni esempi di come i middleware di richiesta possono aiutare il web scraping:

Ruota gli user-agent

Molti siti bloccano gli scraper che inviano lo stesso User-Agent ad ogni richiesta. Possiamo ruotarlo automaticamente:

// Randomly choose User-Agent 
unblocker.use((req, res) => {
  const userAgents = [‘UA1‘, ‘UA2‘, ‘UA3‘];

  req.headers[‘User-Agent‘] = userAgents[Math.floor(Math.random() * userAgents.length)];
});

Ora ogni richiesta avrà uno User-Agent diverso che impedirà questa tattica di blocco.

Login automatico

Per i siti che richiedono l'accesso, possiamo aggiungere le credenziali di autenticazione senza modificare il nostro codice scraper:

unblocker.use((req, res) => {
  if (req.url.includes(‘mysite.com‘)) {
    req.headers[‘Authorization‘] = ‘Bearer xxx‘;
  }  
});

Eventuali richieste al sito vedranno automaticamente effettuato l'accesso dell'utente.

Codificare caratteri speciali

Alcuni siti bloccano caratteri strani come gli emoji. Possiamo eseguire la codifica personalizzata sulle richieste:

unblocker.use((req, res) => {
  req.url = encodeURI(req.url);

  // Encode headers, body etc
});

Ciò consente al nostro raschietto di utilizzare caratteri speciali senza essere bloccato.

Come puoi vedere, le possibilità con i middleware di richiesta sono infinite!

Gestire le risposte

Possiamo anche trasformare i dati di risposta utilizzando i middleware di risposta:

Analizzare ed estrarre dati

Invece di eseguire l'estrazione dei dati nel nostro scraper, possiamo farlo direttamente nel middleware:

unblocker.use((req, res) => {
  const $ = cheerio.load(res.body);

  res.data = $(‘.result‘).text(); 
});

Ora il nostro raschietto riceverà i dati estratti salvando direttamente il codice.

Filtra dati sensibili

Alcuni siti restituiscono cookie, intestazioni e altri metadati di cui non abbiamo bisogno. Possiamo ripulirlo:

unblocker.use((req, res) => {

  // Remove unnecessary cookies
  res.headers[‘set-cookie‘] = []; 

  // Delete other unwanted headers
  delete res.headers[‘x-rate-limit‘];
});

Questo ci fornisce solo i dati utili sulla risposta.

Memorizza nella cache le richieste comuni

Per i siti con endpoint ad accesso frequente, possiamo creare una cache per evitare di raggiungere i limiti di velocità:

// In-memory cache
const cache = {};

unblocker.use((req, res) => {
  if (cache[req.url]) {
    return cache[req.url];
  }

  cache[req.url] = res;
});

Ora le richieste ripetute verranno servite direttamente dalla cache.

Come puoi vedere, i middleware di risposta sono estremamente potenti per elaborare i dati direttamente all'interno di Node-Unblocker prima che raggiungano il tuo scraper.

Sblocco dei nodi e altri proxy

Node-Unblocker fornisce un proxy in-process leggero per gli scraper Node.js. Tuttavia, sono disponibili anche servizi proxy dedicati. Confrontiamo i pro e i contro:

Sblocco dei nodi

  • Vantaggi

    • Leggero e veloce
    • Middleware personalizzabile
    • Si integra direttamente nel raschiatore Node
  • Svantaggi

    • Necessità di gestire i propri proxy
    • Capacità limitate
    • Non ottimizzato per la scala

Luminati

  • Vantaggi

    • Enorme pool di proxy
    • Gestore proxy avanzato
    • Realizzato per il web scraping
  • Svantaggi

    • Eccessivo per raschiatori più piccoli
    • Strumento separato da integrare

proxy intelligente

  • Vantaggi

    • Piani proxy convenienti
    • IP dedicati disponibili
    • Si integra tramite API REST
  • Svantaggi

    • Hai bisogno di un account separato
    • Personalizzazione limitata

Per lo scraping di produzione su larga scala, è altamente raccomandato un servizio proxy commerciale come Luminati o Smartproxy. Gestiscono la gestione dei proxy e semplificano l'integrazione tramite API.

Per gli scraper di piccole e medie dimensioni, Node-Unblocker offre un'ottima opzione in-process. La possibilità di personalizzarlo secondo necessità lo rende davvero potente.

Problemi comuni e come risolverli

Quando utilizzi Node-Unblocker, ecco alcuni problemi comuni che potresti riscontrare e come risolverli:

IP di sblocco del nodo di blocco del sito

Ciò può accadere se utilizzi lo stesso server Node-Unblocker per troppe richieste. La soluzione è ruotare frequentemente gli IP proxy upstream che alimentano Node-Unblocker.

I Websocket non funzionano

Assicurati di averlo fatto unblocker.listen().on(‘upgrade‘, unblocker.onUpgrade) nel codice per abilitare il proxy websocket.

Troppi handle di file aperti

Node-Unblocker può raggiungere il limite di file aperti quando gestisce migliaia di richieste. Aumenta il numero massimo di file aperti in Linux o utilizza un proxy inverso come Nginx per una migliore gestione del socket.

Errori durante lo scraping dei siti

Aggiungere il debug middleware a Node-Unblocker per registrare tutte le richieste. Ciò aiuta a identificare quale richiesta esatta non riesce.

Elevato utilizzo della memoria

Per impostazione predefinita, Node-Unblocker memorizza i corpi delle risposte in memoria, il che può causare picchi. Utilizza lo streaming o disabilita il buffering, se necessario.

scrape() è lento

Node-Unblocker non è ottimizzato per un throughput ultra elevato. Utilizza un servizio proxy dedicato come Smartproxy se hai bisogno di massimizzare la velocità.

Ordine di esecuzione del middleware

Tieni presente l'ordine di esecuzione del middleware: ad esempio, il middleware di risposta viene eseguito prima del middleware di richiesta al ritorno.

La configurazione corretta di Node-Unblocker richiede alcuni tentativi ed errori. Fare riferimento al docs per opzioni di configurazione avanzate.

Distribuzione di Node-Unblocker su larga scala

Per eseguire Node-Unblocker in produzione, è necessario ospitarlo correttamente su server progettati per carichi elevati.

Ecco un'architettura consigliata:

Architettura di sblocco dei nodi

Consiste di quanto segue:

  • Server delle app di sblocco nodi – Contengono la logica principale dell'app proxy. Per carichi elevati, utilizzare almeno 2-4 server.

  • Proxy inverso (Nginx) – Guida la flotta di Node-Unblocker e bilancia il carico su di essi. Gestisce anche SSL e altra logica di routing edge.

  • Banca Dati – Per archiviare dati persistenti delle app come cache, statistiche, ecc. Redis funziona bene.

  • Server proxy a monte – Gli IP proxy esterni che alimentano il traffico in Node-Unblocker. Utilizza almeno 50-100+ proxy qui.

  • cloud hosting – Utilizza un provider come AWS o GCP per gestire i server, il bilanciamento del carico, il failover e la scalabilità.

Architettare correttamente una distribuzione di Node-Unblocker può supportare oltre 100,000 richieste al giorno senza problemi. Assicurati di sottoporre il sistema a stress test su larga scala prima del lancio.

Per carichi ancora più grandi, utilizza un servizio proxy dedicato come Oxylabs che può gestire facilmente milioni di richieste attraverso la loro infrastruttura proxy globale.

Migliori pratiche per il web scraping produttivo

Ecco alcuni suggerimenti generali per massimizzare il successo durante il web scraping tramite Node-Unblocker:

  • Utilizza intervalli di tempo casuali – Raschiare i siti a intervalli casuali, non a un ritmo costante e fisso. Ciò aiuta a evitare modelli di traffico che potrebbero attivare blocchi.

  • Limita le richieste per IP – Limitare le richieste di sblocco nodo per IP proxy upstream a un limite ragionevole come 5 RPM per evitare di bruciare IP.

  • Corrispondenza geografia target – Utilizza IP proxy che provengono dalla stessa regione del pubblico del tuo sito di destinazione. Ciò aiuta a evitare blocchi geografici.

  • Debug con registrazione – Implementare la registrazione delle richieste in modo da poter identificare e riprodurre facilmente gli errori.

  • Impara dai blocchi – Quando vieni bloccato, studia l’esatto approccio di blocco utilizzato e modifica la tua strategia per evitarlo in futuro.

  • Ruota regolarmente i server – Ruota i server proxy e l'infrastruttura ogni pochi mesi per aggiornare tutti gli IP rivolti all'esterno.

  • Utilizza i servizi proxy – Mantenere la propria infrastruttura proxy è complesso. Sfrutta invece un servizio proxy aziendale per l'affidabilità.

Il web scraping può sicuramente essere impegnativo. Ma sfruttando in modo intelligente strumenti come Node-Unblocker e seguendo le migliori pratiche, puoi estrarre i dati praticamente da qualsiasi sito con successo.

Punti chiave

Ecco gli aspetti principali che abbiamo trattato in questa guida completa allo scraping web di Node-Unblocker:

  • Node-Unblocker fornisce un server proxy in-process attraverso il quale instradare le richieste di web scraping
  • Consente di implementare funzionalità critiche come la rotazione dei proxy, middleware personalizzati e supporto websocket
  • La corretta configurazione di Node-Unblocker richiede tentativi ed errori: utilizza il debug per identificare i problemi
  • Per lo scraping su larga scala, si consiglia un servizio proxy dedicato come Luminati o Smartproxy
  • Seguire le migliori pratiche di web scraping aiuta a evitare blocchi ed estrarre i dati in modo affidabile

Node-Unblocker è uno strumento versatile che ti offre un maggiore controllo sulla logica del proxy rispetto ai servizi esterni. Integrandolo direttamente nei tuoi raschiatori sblocca possibilità di livello successivo.

Spero che questa guida abbia contribuito a demistificare Node-Unblocker e come possa aiutarti a racimolare e ridimensionare con successo l'estrazione di dati da qualsiasi sito web! Fatemi sapere se avete altre domande.

Buon raschiamento (sbloccato)!

Tag:

Partecipa alla conversazione

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *