Comment crawler une page web en NodeJS avec Puppeteer et Cheerio
Envie de récupérer les informations d'une ou plusieurs pages web en NodeJS, voilà le code minimal pour le faire !
Article publié le 01/10/2020, dernière mise à jour le 19/09/2023
Parfois il est indispensable de récupérer des informations mises à jour régulièrement sur un site web qui n'expose aucune API au public, ou tout simplement de parcourir toutes les pages d'un site en particulier à la manière d'un robot de moteur de recherche afin de les indexer.
Disclaimer : Attention la majorité des informations publiés sur les sites internet restent la propriété de ces sites et n'ont pas vocation à être récupérées par un tiers sans autorisation.
Si vous avez tout de même besoin de récupérer de telles informations, vous allez devoir récupérer le code source des pages en question (crawler), puis chercher les données dont vous avez besoin (parser) dans cette masse d'information.
Nous allons voir comment faire tout cela en NodeJS aujourd'hui, avec un code minimal que vous pourrez réutiliser et détourner à votre guise.
La méthode
Pour récupérer notre page web et les données qui nous intéressent, nous allons utiliser deux outils différents : Puppeteer et CheeriosJS. Si vous ne connaissez pas ces deux librairies, pas de panique, je vous explique tout.
Puppeteer
Puppeteer est une librairie NodeJS qui met à disposition une API pour automatiser des actions sur une (ou plusieurs) instance Chrome/Chromium. Autrement dit, grâce à cette librairie vous allez pouvoir faire toutes les actions que vous feriez avec un navigateur classique, mais que vous allez contrôler de manière programmatique.
Puppeteer intège de nombreuses fonctionnalités par défaut en plus du chargement des pages comme la prise de screenshots, la génération en pdf à partir d'une page web, etc...
Par défaut, puppeteer est lancé en mode "headless", c'est à dire qu'il n'affiche aucune fenêtre ni aucun rendu graphique.
CheerioJS
Cheerio est simplement une implémentation côté serveur de la célèbre librairie jQuery. En lui passant un code source html ainsi qu'une query, Cheerio va être capable de nous retourner les informations demandée de manière simple et très rapide !
Vous ne pensiez pas réutiliser jQuery un jour avouez ?
Le code
Voici un code minimal pour faire fonctionner ces deux librairies ensembles. En exécutant ce programme, Puppeteer va charger la page principale de mon blog, puis passer le code source à Cheerio afin que ce dernier puisse parser toutes les liens présents sur la page.
Etant donné que le code est simple et commenté à presque chaque ligne, je ne vais pas le détailler plus qu'il ne l'est déjà !
const puppeteer = require('puppeteer'),
$ = require('cheerio');
(async function(){
//Chrome instance launching, do not launch an instance for each page
let browser = await puppeteer.launch();
//Create new blank page in browser
let page = await browser.newPage();
//Open the desired url
await page.goto("https://blog.nicolas.brondin-bernard.com/");
//Once page loaded, get the source code
let html = await page.content();
//Use cheerio to parse every link attribute
let links = $("a", html);
links.each(function(i,link){
console.log($(link).attr("href"));
})
//Don't forget to close the browser instance
await browser.close();
})();
Vous devriez voir apparaitre la liste des liens présents sur l'accueil de mon blog après quelques secondes directement dans votre terminal.
Comme vous pouvez le voir, le code est très court et facile à comprendre. Puppeteer est un outil très puissant, n'hésitez pas à aller voir la documentation pour découvrir tout ce qu'il est possible de faire avec !
Et pour aller plus loin, je vous invite à lire mon article intitulé "5 techniques avancées pour créer un crawler web efficace".
Aucun commentaire pour l'instant