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 !

Améliorez vos compétences en dev !
Des cours complets, créés par des experts, pour tous niveaux et accessibles en illimité grâce à notre abonnement !
19,99€/mois

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".
J'espère que cet article vous aura été utile, à bientôt sur le blog !
Les articles les plus populaires du blog
Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !
Voir la sélection 🚀Recevez les articles de la semaine par e-mail pour ne rien manquer !
S'abonner à la newsletter 📧
À propos de l'auteur
Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.
Aujourd'hui je suis aussi formateur/coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !
Photo by Vidar Nordli-Mathisen on Unsplash