Introduction au Web Scraping avec Node.js (JavaScript)

Grattage, Jan-08-20225 minutes de lecture

Vous cherchez des moyens d'utiliser les nouvelles technologies ? L'extraction web ou web scraping vous permet de collecter des données web structurées de manière automatisée. Par exemple, le web scraping est utilisé dans le monde du commerce électronique pour surveiller les prix des services et des produits des concurrents. Autres cas d'utilisation de l'extraction web

Table des matières

Vous cherchez des moyens d'utiliser les nouvelles technologies ? L'extraction web ou web scraping vous permet de collecter des données web structurées de manière automatisée. Par exemple, le web scraping est utilisé dans le monde du commerce électronique pour surveiller les prix des services et des produits des concurrents. D'autres cas d'utilisation du web scraping sont présentés ci-dessous.

  • Trouver des données de tendance sur les sites de médias sociaux
  • Collecte de données sur un autre site web pour les utiliser sur votre propre site web
  • Extraction d'adresses électroniques à partir de sites web qui publient des courriels publics
  • Recherche d'images de produits et de données de vente dans les boutiques en ligne

Vous allez apprendre à faire du web scraping avec Node.js. Mais d'abord, voyons ce qu'est Node.js. Il s'agit d'une plateforme open-source côté serveur qui permet de développer des applications côté serveur et des applications réseau. Sa bibliothèque est très rapide dans l'exécution du code car ses applications ne mettent aucune donnée en mémoire tampon. Elles sortent simplement les données par morceaux. Voici quelques-uns des domaines dans lesquels nous pouvons utiliser Node.js.

  • Applications de flux de données
  • Applications à page unique
  • Applications liées aux entrées/sorties
  • Applications en temps réel à forte intensité de données

Pourquoi utiliser Node.js pour le Web Scraping ?

Voici les raisons d'utiliser Node.js pour le web scraping.

Facile à apprendre - Javascript est un langage de programmation populaire utilisé par les développeurs frontaux. Ils peuvent rapidement apprendre et utiliser Node.js au niveau du backend car il s'agit d'un simple Javascript. Ils n'ont donc pas besoin de faire un effort supplémentaire pour apprendre Node.js.

Langage de programmation unique - Vous pouvez utiliser Node.js pour écrire des applications côté serveur en Javascript. En bref, les développeurs Node.js utilisent Javascript pour écrire des applications web frontales et dorsales. Ils n'ont pas besoin d'utiliser un autre langage de programmation côté serveur. Ils peuvent ainsi facilement déployer des applications web car presque tous les navigateurs web supportent Javascript. 

Évolutivité - Les développeurs Node.js peuvent facilement faire évoluer les applications dans les directions horizontales et verticales. Ils peuvent ajouter des nœuds supplémentaires aux systèmes existants pour faire évoluer les applications horizontalement. Ils peuvent faire évoluer les applications verticalement en ajoutant des ressources supplémentaires aux nœuds individuels. 

Haute performance - Node.js utilise le moteur Javascript V8 de Google pour interpréter le code Javascript en le compilant directement dans le code machine. Vous pouvez donc mettre en œuvre le code de manière efficace en utilisant ce moteur. 

Mise en cache - Les développeurs peuvent également mettre en cache des modules individuels en utilisant l'environnement d'exécution open-source de Node.js. La mise en cache permet aux applications de charger les pages web plus rapidement, de sorte que les développeurs n'ont pas à réutiliser les codes.   

Récupération de données sur le Web avec Node.js

Pour le web scraping avec Node.js, nous utiliserons les deux modules npm suivants.

cheerio - Il s'agit d'une technologie Javascript utilisée pour extraire des données des sites web. Elle permet de sélectionner, d'éditer et de visualiser les éléments du DOM.

request-promise - Il s'agit d'un simple client HTTP que vous pouvez utiliser pour effectuer des appels HTTP rapides et faciles.

Configuration du projet

Vous devez créer un nouveau dossier de projet. Créez un fichier index.js dans ce dossier. Ensuite, vous devez installer les dépendances. Pour cela, ouvrez votre ligne de commande et tapez la commande suivante. 

npm install --save request request-promise cheerio

Vous devez exiger les requêtes-promesse et cheerio dans votre fichier index.js en utilisant le code ci-dessous.

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

Set Request

Vous savez que request-promise est une "requête" du client avec le support de Promise. En d'autres termes, elle accepte un objet en entrée et renvoie une promesse. 

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

Dans le code ci-dessus, l'objet options doit faire deux choses.

  • En passant l'URL, vous voulez récupérer
  • Chargement du code HTML retourné à l'aide de cheerio pour que vous puissiez l'utiliser.

La clé uri dans le code est le site web que vous voulez récupérer.

La clé de transformation charge le corps retourné dans cheerio à l'aide d'une requête-promesse avant de nous le renvoyer.

Faire une demande

Vous pouvez faire votre demande en utilisant le code ci-dessous.

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

Dans le code ci-dessus, nous transmettons l'objet "options" à "request-promise". Nous attendons ensuite de voir si notre requête réussit ou échoue. 

Nous créons maintenant notre propre version du code dans laquelle nous utilisons les fonctions fléchées, comme indiqué ci-dessous.

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

Vous devez remplacer le placeholder uri par le site web que vous voulez scraper. Vous pouvez ensuite ouvrir votre console et taper ce qui suit dans le fichier index.js.

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

Voici comment vous pouvez faire votre premier scrape en utilisant Node.js. Voici le code complet que nous avons réalisé jusqu'à présent.

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);
  });

Utiliser les données

Vous pouvez utiliser cheerio pour extraire les données que vous souhaitez. L'implémentation du sélecteur de cheerio est presque la même que celle de jQuery. Vous pouvez utiliser la méthode du sélecteur pour parcourir et sélectionner des éléments dans le document. Vous pouvez également l'utiliser pour obtenir et définir des données. Par exemple, vous souhaitez récupérer le code HTML suivant d'un site web.

 id="cities">
 class="large">Europe
 id="medium">Turquie
 class="small">Salem

Nous pouvons utiliser '#' pour sélectionner les identifiants, '.' pour sélectionner les classes. Les éléments peuvent être sélectionnés par leur nom de balise, comme indiqué ci-dessous.

$('.large').text()
// Europe
$('#medium').text()
// Turquie
$('li[class=small]').html()

Nous pouvons utiliser la fonction each() pour parcourir plusieurs éléments. Nous pouvons renvoyer le texte interne de l'élément de la liste en utilisant le même code HTML que celui présenté ci-dessus.

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

Voici comment vous pouvez extraire des données de sites web à l'aide de Node.js. Vous pouvez également utiliser des méthodes supplémentaires pour extraire les données des éléments enfants d'une liste ou le code HTML d'un site web.

L'importance de l'utilisation de Node.js avec proxys

Vous savez que proxys sert d'intermédiaire entre les clients qui demandent des ressources et le serveur qui fournit ces ressources. Il existe trois types différents de proxys, comme indiqué ci-dessous.

Proxy résidentiel - Ce proxy contient les adresses IP du fournisseur d'accès à Internet (FAI) local, de sorte que le site web cible ne peut pas déterminer s'il s'agit d'une personne réelle ou d'un scraper qui navigue sur le site web. 

Datacenter Proxy - Ce type de proxy provient d'un fournisseur de services en nuage et est utilisé par un grand nombre de personnes parce qu'il est moins cher que le proxy résidentiel proxys.

Proxy mobile - Les proxys mobiles sont des IP d'appareils mobiles privés et fonctionnent de la même manière que les proxys résidentiels. Ils sont fournis par les opérateurs de réseaux mobiles et sont très coûteux. 

Vous pouvez utiliser un proxy pour le web scraping en utilisant le module requests de Python. Tout d'abord, vous devez importer le module requests. Ensuite, vous devez créer un pool de proxys et les itérer. Vous pouvez utiliser requests.get() pour envoyer une requête GET en passant un proxy comme paramètre de l'URL, comme indiqué ci-dessous.

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)

Vous obtiendrez le résultat suivant.

Conclusion sur le Web Scraping à l'aide de Node.js

Jusqu'à présent, nous avons vu qu'il était possible d'extraire des données structurées de sites web à l'aide d'une méthode automatisée appelée "web scraping". Vous pouvez racler les sites web en utilisant différents langages, mais dans cet article, nous avons appris à utiliser Node.js pour collecter des données à partir de sites web. Tout ce que nous avons à faire est d'ajouter du code dans le fichier index.js du dossier du projet. Après avoir configuré le projet, nous pouvons définir et effectuer la requête pour extraire les données. En outre, nous pouvons utiliser les données à diverses fins. Vous savez qu'il n'est pas sûr de gratter des sites web. Vous devez donc utiliser proxys pour collecter les données du site Web que vous souhaitez. Vous pouvez utiliser le site résidentiel ou le centre de données proxys, mais il est préférable d'utiliser le site résidentiel proxys car il est rapide et ne peut pas être facilement détecté.