Introduzione al Web Scraping con Node.js (JavaScript)

Raschiamento, Jan-08-20225 minuti di lettura

Siete alla ricerca di modi per utilizzare le nuove tecnologie? L'estrazione dal web o web scraping vi offre un modo per raccogliere dati web strutturati in modo automatizzato. Ad esempio, il web scraping viene utilizzato nel mondo dell'e-commerce per monitorare i prezzi dei servizi e dei prodotti della concorrenza. Altri casi di utilizzo del web scraping

Indice dei contenuti

Siete alla ricerca di modi per utilizzare le nuove tecnologie? L'estrazione dal web o web scraping vi offre un modo per raccogliere dati web strutturati in modo automatizzato. Ad esempio, il web scraping viene utilizzato nel mondo dell'e-commerce per monitorare i prezzi dei servizi e dei prodotti della concorrenza. Di seguito sono riportati altri casi di utilizzo del web scraping.

  • Trovare dati di tendenza sui siti di social media
  • Raccolta di dati da un altro sito web per utilizzarli sul proprio sito web
  • Estrazione di indirizzi e-mail da siti web che pubblicano e-mail pubbliche
  • Scraping di negozi online per immagini di prodotti e dati di vendita

Imparerete a fare web scraping con Node.js. Ma prima vediamo cos'è Node.js. È una piattaforma open-source per lo sviluppo di applicazioni lato server e di rete. La sua libreria è molto veloce nell'esecuzione del codice perché le sue applicazioni non bufferizzano i dati. Eseguono semplicemente l'output dei dati in pezzi. Di seguito sono riportate alcune delle aree in cui è possibile utilizzare Node.js.

  • Applicazioni di streaming dei dati
  • Applicazioni a pagina singola
  • Applicazioni con vincolo di ingresso/uscita
  • Applicazioni in tempo reale ad alta intensità di dati

Perché usare Node.js per lo scraping del web?

Ecco i motivi per utilizzare Node.js per lo scraping del web.

Facile da imparare - Javascript è un linguaggio di programmazione popolare utilizzato dagli sviluppatori frontend. Questi ultimi possono imparare e utilizzare rapidamente Node.js nel backend, poiché si tratta di un semplice Javascript. Quindi, non devono fare sforzi supplementari per imparare Node.js.

Singolo linguaggio di programmazione - È possibile utilizzare Node.js per scrivere applicazioni lato server in Javascript. In breve, gli sviluppatori di Node.js utilizzano Javascript per scrivere applicazioni web sia frontend che backend. Non hanno bisogno di utilizzare altri linguaggi di programmazione lato server. Possono quindi distribuire facilmente le applicazioni web perché quasi tutti i browser web supportano Javascript. 

Scalabilità - Gli sviluppatori Node.js possono facilmente scalare le applicazioni in senso orizzontale e verticale. Possono aggiungere altri nodi ai sistemi esistenti per scalare le applicazioni orizzontalmente. Possono scalare verticalmente le applicazioni aggiungendo risorse supplementari ai singoli nodi. 

Prestazioni elevate - Node.js utilizza il motore Javascript V8 di Google per interpretare il codice Javascript mentre lo compila direttamente nel codice macchina. Pertanto, è possibile implementare efficacemente il codice utilizzando questo motore. 

Caching - Gli sviluppatori possono anche mettere in cache singoli moduli utilizzando l'ambiente runtime open-source di Node.js. La cache consente alle applicazioni di caricare le pagine web più velocemente, in modo che gli sviluppatori non debbano riutilizzare i codici.   

Scraping del web con Node.js

Per lo scraping del web con Node.js, utilizzeremo i seguenti due moduli npm .

cheerio - È una tecnologia Javascript utilizzata per estrarre dati dai siti web. Aiuta a selezionare, modificare e visualizzare gli elementi del DOM.

request-promise - È un semplice client HTTP che si può usare per effettuare chiamate HTTP semplici e veloci.

Impostazione del progetto

È necessario creare una nuova cartella di progetto. Creare un file index.js all'interno della cartella. Poi bisogna installare le dipendenze. Per questo, aprire la riga di comando e digitare il seguente comando. 

npm install --save request request-promise cheerio

È necessario richiedere la request-promise e la cheerio nel file index.js, utilizzando il codice seguente.

const rp = require('request-promise');
const cheerio = require('cheerio');

Richiesta di impostazione

Si sa che request-promise è una 'richiesta' del client con supporto a Promise. In altre parole, accetta un oggetto come input e restituisce una promessa. 

const options = {
 uri: `https://www.yourURLhere.com`,
 transform: function (body) {
   return cheerio.load(body);
 }
};

Nel codice precedente, l'oggetto options deve fare due cose.

  • Passando l'URL, si vuole effettuare lo scrape
  • Caricare l'HTML restituito usando cheerio, in modo da poterlo usare.

La chiave uri nel codice è il sito web che si desidera analizzare.

La chiave transform carica il corpo restituito in cheerio usando request-promise prima di restituirlo.

Fare una richiesta

È possibile effettuare la richiesta utilizzando il codice sottostante.

rp(OPTIONS)
   .then(function (data) {
       // REQUEST SUCCEEDED: DO SOMETHING
   })
   .catch(function (err) {
       // REQUEST FAILED: ERROR OF SOME KIND
   });

Nel codice precedente, passiamo l'oggetto options a request-promise. Aspettiamo quindi di vedere se la nostra richiesta ha successo o fallisce. 

Ora creiamo la nostra versione del codice in cui utilizziamo le funzioni freccia, come mostrato di seguito.

rp(options)
 .then(($) => {
   console.log($);
 })
 .catch((err) => {
   console.log(err);
 });

È necessario sostituire il segnaposto uri con il sito web che si desidera analizzare. Si può quindi aprire la console e digitare quanto segue nel file index.js.

{ [Function: initialize]
 fn:
  initialize {
    constructor: [Circular],
    _originalRoot:
     { type: 'root',
       name: 'root',
       namespace: 'http://www.w3.org/1999/xhtml',
       attribs: {},
       ...

Ecco come è possibile effettuare il primo scrape utilizzando Node.js. Ecco il codice completo che abbiamo fatto finora.

const rp = require('request-promise');
const cheerio = require('cheerio');
const options = {
  uri: `https://www.google.com`,
  transform: function (body) {
    return cheerio.load(body);
  }
};

rp(options)
  .then(($) => {
    console.log($);
  })
  .catch((err) => {
    console.log(err);
  });

Utilizzare i dati

È possibile utilizzare cheerio per estrarre i dati desiderati. L'implementazione del selettore di cheerio è quasi identica a quella di jQuery. È possibile utilizzare il metodo del selettore per attraversare e selezionare gli elementi del documento. È anche possibile utilizzarlo per ottenere e impostare dati. Per esempio, si vuole fare lo scraping del seguente HTML di un sito web.

 id="città">
 class="large">Europa
 id="medio">Turchia
 class="small">Salem

Si può usare '#' per selezionare gli id, '.' per selezionare le classi. Gli elementi possono essere selezionati in base ai loro nomi di tag, come mostrato di seguito.

$('.large').text()
// Europa
$('#medio').text()
// Turchia
$('li[class=small]').html()

Possiamo usare la funzione each() per scorrere più elementi. Possiamo restituire il testo interno dell'elemento dell'elenco utilizzando lo stesso codice HTML mostrato sopra.

$('li').each(function(i, elem) {
 cities[i] = $(this).text();
});

Ecco come è possibile effettuare lo scraping di dati da siti web utilizzando Node.js. È inoltre possibile utilizzare metodi aggiuntivi per estrarre i dati degli elementi figli di un elenco o l'HTML di un sito web.

L'importanza di usare Node.js con i proxy

È noto che i proxy fungono da intermediari tra i client che richiedono risorse e il server che le fornisce. Esistono tre diversi tipi di proxy, come illustrato di seguito.

Proxy residenziale - Questo proxy contiene gli indirizzi IP del provider di servizi Internet (ISP) locale, in modo che il sito Web di destinazione non possa determinare se si tratta di una persona reale o dello scraper che naviga sul sito Web. 

Datacenter Proxy - Questo tipo di proxy proviene da un provider di servizi cloud ed è utilizzato da un gran numero di persone perché è più economico dei proxy residenziali.

Proxy mobile - I proxy mobili sono IP di dispositivi mobili privati e funzionano come i proxy residenziali. Sono forniti dagli operatori di rete mobile e sono molto costosi. 

È possibile utilizzare un proxy per lo scraping del web utilizzando il modulo requests di Python. Per prima cosa, occorre importare il modulo requests. Quindi, bisogna creare un pool di proxy e iterarli. Si può usare requests.get() per inviare la richiesta GET passando un proxy come parametro all'URL, come mostrato di seguito.

import requests
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
# Sending a GET request to the url and
# passing the proxy as a parameter.
page = requests.get(url,
                   proxies={"http": proxy, "https": proxy})
 # Printing the content of the requested url.
print(page.text)

Si otterrà il seguente risultato.

Conclusioni sullo scraping del web con Node.js

Finora abbiamo discusso della possibilità di estrarre dati strutturati dai siti web utilizzando il metodo automatizzato chiamato web scraping. È possibile effettuare lo scraping dei siti web utilizzando diversi linguaggi, ma in questo articolo abbiamo imparato a usare Node.js per raccogliere dati dai siti web. Tutto ciò che dobbiamo fare è aggiungere del codice nel file index.js della cartella del progetto. Dopo aver configurato il progetto, possiamo impostare ed effettuare la richiesta per estrarre i dati. Inoltre, possiamo utilizzare i dati per vari scopi. È noto che non è sicuro effettuare lo scraping di siti web. Pertanto, è necessario utilizzare dei proxy per raccogliere i dati dal sito web desiderato. È possibile utilizzare proxy residenziali o di data center, ma è preferibile utilizzare i proxy residenziali perché sono veloci e non possono essere facilmente rilevati.