---
title: "Web Scraping avec Crawlee &#8211; Guide étape par étape"
slug: web-scraping-with-crawlee
date: 2024-08-04T12:26:38+00:00
modified: 2026-08-26T18:52:10+00:00
permalink: https://brightdata.fr/blog/donnees-web/web-scraping-with-crawlee
type: blog
---

[ Blog ](https://brightdata.fr/blog "Blog") / [Données Web](https://brightdata.fr/blog/donnees-web)







 [Données Web](https://brightdata.fr/blog/donnees-web)

# Web Scraping avec Crawlee – Guide étape par étape

Découvrez comment utiliser Crawlee pour un scraping web efficace avec Node.js, couvrant tout, de la configuration de base à la rotation de proxy avancée et à la gestion du contenu dynamique.

 13 min de lecture





 [ ![White number one with a flame on top.](https://media.brightdata.fr/2023/03/Favicon-2-1-50x50.png) ](https://brightdata.com/blog/authors/jakkie-koekemoer)

 [Jakkie Koekemoer

 ](https://brightdata.com/blog/authors/jakkie-koekemoer)





 ![Web Scraping With Crawlee blog image](https://media.brightdata.fr/2024/08/Web-Scraping-With-Crawlee.png)





Si vous vous intéressez au scraping web, [Crawlee](https://crawlee.dev/) peut vous aider. C’est un moteur de scraping rapide et interactif utilisé par les data scientists, les développeurs et les chercheurs pour collecter des données web. Crawlee est facile à configurer et offre des fonctionnalités telles que la [rotation de proxy](https://crawlee.dev/docs/guides/proxy-management) et la gestion de session. Ces fonctionnalités sont essentielles pour scraper des sites web volumineux ou dynamiques sans que votre adresse IP soit bloquée, garantissant une collecte de données fluide et ininterrompue.

Dans ce tutoriel, vous apprendrez à utiliser Crawlee pour le [scraping web](/blog/how-tos/what-is-web-scraping). Vous commencerez par un exemple basique et progresserez vers des concepts plus avancés, tels que la gestion de session et le scraping de pages dynamiques.

## <a></a>Comment faire du Scraping Web avec Crawlee

Avant de commencer ce tutoriel, assurez-vous que les prérequis suivants sont installés sur votre machine :

- Node.js
- npm
- Visual Studio Code

### <a></a>Scraping Web de base avec Crawlee

Une fois tous vos prérequis en place, commençons par scraper le site [Books to Scrape](https://books.toscrape.com/), qui est idéal pour l’apprentissage car il offre une structure HTML simple.

Ouvrez votre terminal ou shell et commencez par initialiser un projet Node.js avec les commandes suivantes :

```none
mkdir crawlee-tutorial
cd crawlee-tutorial
npm init -y

```

Ensuite, installez la bibliothèque Crawlee avec la commande suivante :

```none
npm install crawlee

```

Pour scraper efficacement des données d’un site web, vous devez inspecter la page web que vous souhaitez scraper afin d’obtenir les détails des balises HTML du site. Pour ce faire, ouvrez le site dans votre navigateur et accédez aux **Outils de développement** en faisant un clic droit n’importe où sur la page web. Cliquez ensuite sur **Inspecter** ou **Inspecter l’élément** :

![Inspecter l'élément HTML](https://media.brightdata.fr/2024/08/Inspect-HTML-element.png)L’onglet **Éléments** devrait être actif par défaut et représente la structure HTML de la page web. Dans cet exemple, chaque livre affiché est placé dans une balise HTML `article` avec la classe `product_pod`. Au sein de chaque article, le titre du livre est contenu dans une balise `h3`. Le titre réel du livre est contenu dans l’attribut `title` de la balise `a` située dans l’élément `h3`. Le prix du livre est situé dans la balise `p` avec la classe `price_color` :

![Inspecter les éléments HTML sur le site Books to Scrape](https://media.brightdata.fr/2024/08/Inspect-the-HTML-elements-on-the-Books-to-Scrape-website.png)Dans le répertoire racine de votre projet, créez un fichier nommé `scrape.js` et ajoutez le code suivant :

```none
   const { CheerioCrawler } = require('crawlee');

   const crawler = new CheerioCrawler({
       async requestHandler({ request, $ }) {
           const books = [];
           $('article.product_pod').each((index, element) => {
               const title = $(element).find('h3 a').attr('title');
               const price = $(element).find('.price_color').text();
               books.push({ title, price });
           });
           console.log(books);
       },
   });

   crawler.run(['https://books.toscrape.com/']);

```

Dans ce code, vous utilisez `CheerioCrawler` de `crawlee` pour scraper les titres et les prix des livres depuis `https://books.toscrape.com/`. Le crawler récupère le contenu HTML, extrait les données des éléments `<article class="product_pod">` à l’aide d’une syntaxe similaire à jQuery, et affiche les résultats dans la console.

Une fois le code précédent ajouté à votre fichier `scrape.js`, vous pouvez l’exécuter avec la commande suivante :

```none
node scrape.js

```

Un tableau de titres et de prix de livres devrait s’afficher dans votre terminal :

```none
…output omitted…
  {
    title: 'The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics',
    price: '£22.60'
  },
  { title: 'The Black Maria', price: '£52.15' },
  {
    title: 'Starving Hearts (Triangular Trade Trilogy, #1)',
    price: '£13.99'
  },
  { title: "Shakespeare's Sonnets", price: '£20.66' },
  { title: 'Set Me Free', price: '£17.46' },
  {
    title: "Scott Pilgrim's Precious Little Life (Scott Pilgrim #1)",
    price: '£52.29'
  },
…output omitted…

```

### <a></a>Rotation de Proxy avec Crawlee

Un Proxy est l’intermédiaire entre votre ordinateur et internet. Lorsque vous utilisez un Proxy, il envoie vos requêtes web au serveur proxy, qui les transmet au site web cible. Le serveur proxy renvoie la réponse du site web, masque votre adresse IP et vous protège contre les limitations de débit ou les bannissements d’IP.

Crawlee simplifie la mise en œuvre des proxies grâce à sa gestion intégrée, qui gère efficacement les nouvelles tentatives et les erreurs. Crawlee prend également en charge une gamme de configurations de proxy pour implémenter des proxies rotatifs.

Dans la section suivante, vous allez configurer un Proxy en obtenant d’abord un proxy valide. Ensuite, vous vérifierez que vos requêtes transitent bien par les proxies.

#### <a></a>Configurer un Proxy

Les proxies gratuits sont généralement déconseillés car ils peuvent être lents et peu sécurisés, et ne disposent pas forcément du support nécessaire pour les tâches web sensibles. Envisagez plutôt d’utiliser [Bright Data](/), un service de proxy sécurisé, stable et fiable. Il propose également des essais gratuits pour tester avant de s’engager.

Pour utiliser Bright Data, cliquez sur le bouton **Essai gratuit** sur leur [page d’accueil](/) et remplissez les informations requises pour créer un compte.

Une fois votre compte créé, connectez-vous au tableau de bord Bright Data, accédez à **Proxies &amp; Infrastructure de scraping**, et ajoutez un nouveau proxy en sélectionnant **[Proxys résidentiels](/proxy-types/residential-proxies)** :

![Ajouter un proxy résidentiel](https://media.brightdata.fr/2024/08/Add-a-residential-proxy.png)Conservez les paramètres par défaut et finalisez la création de votre proxy résidentiel en cliquant sur **Ajouter**.

> Si vous êtes invité à installer un certificat, vous pouvez sélectionner **Continuer sans certificat**. Cependant, pour la production et les cas d’utilisation réels, vous devriez configurer le certificat afin d’éviter tout abus si vos informations de proxy venaient à être exposées.

Une fois créé, notez les identifiants du proxy, notamment l’hôte, le port, le nom d’utilisateur et le mot de passe. Vous en aurez besoin à l’étape suivante :

![Identifiants du proxy Bright Data](https://media.brightdata.fr/2024/08/Bright-Data-proxy-credentials.png)Dans le répertoire racine de votre projet, exécutez la commande suivante pour installer la bibliothèque [axios](https://www.npmjs.com/package/axios) :

```none
npm install axios

```

Vous utilisez la bibliothèque axios pour effectuer une requête GET vers `http://lumtest.com/myip.json`, qui retourne les détails du proxy que vous utilisez à chaque exécution du script.

Ensuite, dans le répertoire racine de votre projet, créez un fichier nommé `scrapeWithProxy.js` et ajoutez le code suivant :

```none
const { CheerioCrawler } = require("crawlee");
const { ProxyConfiguration } = require("crawlee");
const axios = require("axios");

const proxyConfiguration = new ProxyConfiguration({
  proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"],
});

const crawler = new CheerioCrawler({
  proxyConfiguration,
  async requestHandler({ request, $, response, proxies }) {
    // Make a GET request to the proxy information URL
    try {
      const proxyInfo = await axios.get("http://lumtest.com/myip.json", {
        proxy: {
          host: "HOST",
          port: PORT,
          auth: {
            username: "USERNAME",
            password: "PASSWORD",
          },
        },
      });
      console.log("Proxy Information:", proxyInfo.data);
    } catch (error) {
      console.error("Error fetching proxy information:", error.message);
    }

    const books = [];
    $("article.product_pod").each((index, element) => {
      const title = $(element).find("h3 a").attr("title");
      const price = $(element).find(".price_color").text();
      books.push({ title, price });
    });
    console.log(books);
  },
});

crawler.run(["https://books.toscrape.com/"]);

```

> **Remarque :** Assurez-vous de remplacer `HOST`, `PORT`, `USERNAME` et `PASSWORD` par vos identifiants.

Dans ce code, vous utilisez `CheerioCrawler` de `crawlee` pour scraper des informations depuis `https://books.toscrape.com/` via un proxy spécifié. Vous configurez le proxy avec `ProxyConfiguration` ; ensuite, vous récupérez et affichez les détails du proxy via une requête GET vers `http://lumtest.com/myip.json`. Enfin, vous extrayez les titres et les prix des livres à l’aide de la syntaxe jQuery-like de Cheerio et affichez les données dans la console.

Vous pouvez maintenant exécuter et tester le code pour vous assurer que les proxies fonctionnent :

```none
node scrapeWithProxy.js

```

Vous obtiendrez des résultats similaires à avant, mais cette fois, vos requêtes sont acheminées via les proxies Bright Data. Vous devriez également voir les détails du proxy dans la console :

```none
Proxy Information: {
  country: 'US',
  asn: { asnum: 21928, org_name: 'T-MOBILE-AS21928' },
  geo: {
    city: 'El Paso',
    region: 'TX',
    region_name: 'Texas',
    postal_code: '79925',
    latitude: 31.7899,
    longitude: -106.3658,
    tz: 'America/Denver',
    lum_city: 'elpaso',
    lum_region: 'tx'
  }
}
[
  { title: 'A Light in the Attic', price: '£51.77' },
  { title: 'Tipping the Velvet', price: '£53.74' },
  { title: 'Soumission', price: '£50.10' },
  { title: 'Sharp Objects', price: '£47.82' },
  { title: 'Sapiens: A Brief History of Humankind', price: '£54.23' },
  { title: 'The Requiem Red', price: '£22.65' },
…output omitted..

```

Si vous exécutez à nouveau le script avec `node scrapingWithBrightData.js`, vous devriez voir une adresse IP différente utilisée par le serveur proxy Bright Data. Cela valide que Bright Data fait tourner les emplacements et les IPs à chaque exécution de votre script de scraping, ce qui est essentiel pour contourner les blocages ou les bannissements d’IP des sites cibles.

> **Remarque :** Dans la `proxyConfiguration`, vous auriez pu passer différentes IPs de proxy, mais puisque Bright Data s’en charge pour vous, vous n’avez pas besoin de les spécifier.

### <a></a>Gestion des Sessions avec Crawlee

Les sessions permettent de maintenir l’état entre plusieurs requêtes, ce qui est utile pour les sites web utilisant des cookies ou des sessions de connexion.

Pour gérer une session, créez un fichier nommé `scrapeWithSessions.js` dans le répertoire racine de votre projet et ajoutez le code suivant :

```none
const { CheerioCrawler, SessionPool } = require("crawlee");

(async () => {
  // Open a session pool
  const sessionPool = await SessionPool.open();

  // Ensure there is a session in the pool
  let session = await sessionPool.getSession();
  if (!session) {
    session = await sessionPool.createSession();
  }

  const crawler = new CheerioCrawler({
    useSessionPool: true, // Enable session pool
    async requestHandler({ request, $, response, session }) {
      // Log the session information
      console.log(`Using session: ${session.id}`);

      // Extract book data and log it (for demonstration)
      const books = [];
      $("article.product_pod").each((index, element) => {
        const title = $(element).find("h3 a").attr("title");
        const price = $(element).find(".price_color").text();
        books.push({ title, price });
      });
      console.log(books);
    },
  });

  // First run
  await crawler.run(["https://books.toscrape.com/"]);
  console.log("First run completed.");

  // Second run
  await crawler.run(["https://books.toscrape.com/"]);
  console.log("Second run completed.");
})();

```

Ici, vous utilisez `CheerioCrawler` et `SessionPool` de `crawlee` pour scraper des données depuis `https://books.toscrape.com/`. Vous initialisez un pool de sessions, puis configurez le crawler pour l’utiliser. La fonction `requestHandler` enregistre les informations de session et extrait les titres et prix des livres à l’aide des sélecteurs jQuery-like de Cheerio. Le code effectue deux exécutions de scraping consécutives et enregistre l’ID de session à chaque fois.

Exécutez et testez le code pour valider que différentes sessions sont utilisées :

```none
node scrapeWithSessions.js

```

Vous devriez obtenir des résultats similaires à avant, mais cette fois, vous devriez également voir l’ID de session pour chaque exécution :

```none
Using session: session_GmKuZ2TnVX
[
  { title: 'A Light in the Attic', price: '£51.77' },
  { title: 'Tipping the Velvet', price: '£53.74' },
…output omitted…
Using session: session_lNRxE89hXu
[
  { title: 'A Light in the Attic', price: '£51.77' },
  { title: 'Tipping the Velvet', price: '£53.74' },
…output omitted…

```

Si vous exécutez à nouveau le code, vous devriez voir qu’un ID de session différent est utilisé.

### <a></a>Gestion du Contenu Dynamique avec Crawlee

Si vous [traitez des sites web dynamiques](/blog/how-tos/scrape-dynamic-websites-python) (*c’est-à-dire* des sites dont le contenu est généré par JavaScript), le scraping web peut être extrêmement complexe car vous devez exécuter JavaScript pour accéder aux données. Pour gérer ces situations, Crawlee s’intègre avec [Puppeteer](https://pptr.dev/), un navigateur headless capable d’exécuter JavaScript et d’interagir avec le site cible comme le ferait un humain.

Pour illustrer cette fonctionnalité, nous allons scraper le contenu de [cette page YouTube](https://www.youtube.com/watch?v=wZ6cST5pexo). Comme toujours, avant de scraper quoi que ce soit, assurez-vous de consulter les règles et conditions d’utilisation de la page.

Après avoir consulté les conditions d’utilisation, créez un fichier nommé `scrapeDynamicContent.js` dans le répertoire racine de votre projet et ajoutez le code suivant :

```none
const { PuppeteerCrawler } = require("crawlee");

async function scrapeYouTube() {
  const crawler = new PuppeteerCrawler({
    async requestHandler({ page, request, enqueueLinks, log }) {
      const { url } = request;
      await page.goto(url, { waitUntil: "networkidle2" });

      // Scraping first 10 comments
      const comments = await page.evaluate(() => {
        return Array.from(document.querySelectorAll("#comments #content-text"))
          .slice(0, 10)
          .map((el) => el.innerText);
      });

      log.info(`Comments: ${comments.join("n")}`);
    },

    launchContext: {
      launchOptions: {
        headless: true,
      },
    },
  });

  // Add the URL of the YouTube video you want to scrape
  await crawler.run(["https://www.youtube.com/watch?v=wZ6cST5pexo"]);
}

scrapeYouTube();

```

Ensuite, exécutez le code avec la commande suivante :

```none
node scrapeDynamicContent.js

```

Dans ce code, vous utilisez `PuppeteerCrawler` de la bibliothèque Crawlee pour scraper les commentaires d’une vidéo YouTube. Vous commencez par initialiser un crawler qui navigue vers une URL de vidéo YouTube spécifique et attend que la page soit entièrement chargée. Une fois la page chargée, le code évalue son contenu pour extraire les dix premiers commentaires en sélectionnant les éléments avec le sélecteur CSS `#comments #content-text`. Les commentaires sont ensuite affichés dans la console.

Votre résultat devrait inclure les dix premiers commentaires relatifs à la vidéo sélectionnée :

```none
INFO  PuppeteerCrawler: Starting the crawler.
INFO  PuppeteerCrawler: Comments: Who are you rooting for?? US Marines or Ex Cons
Bro Mateo is a beast, no lifting straps, close stance.
ex convict doing the pushups is a monster.
I love how quick this video was, without nonsense talk and long intros or outros
"They Both have combat experience" is wicked
That military guy doing that deadlift is really no joke.. ...
One lives to fight and the other fights to live.
Finally something that would test the real outcome on which narrative is true on movies
I like the comradery between all of them. Especially on the Bench Press ... Both team members quickly helped out on the spotting to protect from injury. Well done.
I like this style, no youtube funny business. Just straight to the lifts
…output omitted…

```

Vous pouvez trouver tout le code utilisé dans ce tutoriel sur [GitHub](https://github.com/See4Devs/crawlee-web-scraping).

## <a></a>Conclusion

Dans cet article, vous avez appris à utiliser Crawlee pour le scraping web et vous avez vu comment il peut contribuer à améliorer l’efficacité et la fiabilité de vos projets de scraping web.

N’oubliez pas de toujours respecter le fichier [`robots.txt`](/blog/how-tos/robots-txt-for-web-scraping-guide) et les conditions d’utilisation du site cible lors de la collecte de données.

Prêt à faire passer vos projets de scraping web au niveau supérieur avec des données, des outils et des proxies de qualité professionnelle ? Explorez l’infrastructure complète de scraping web de [Bright Data](/), proposant des [jeux de données prêts à l’emploi](/products/datasets) et des [services de proxy avancés](/proxy-types) pour optimiser votre collecte de données.

Inscrivez-vous maintenant et commencez votre essai gratuit !



Contacter ventesEssai gratuit![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Table des matières







Dedicated Scraper APIs &amp; No-Code Scrapers

Over 1000 scrapers for all popular domains. Simplify your web scraping.

[See pricing](/pricing/web-scraper "See pricing")

Just want data? Skip scraping.

Hundreds of ready-to-use datasets from all popular domains.

[See pricing](/pricing/datasets "See pricing")







 [ ](https://news.ycombinator.com/submitlink?t=Web+Scraping+avec+Crawlee+%26%238211%3B+Guide+%C3%A9tape+par+%C3%A9tape&u=https://brightdata.fr/blog/donnees-web/web-scraping-with-crawlee) [ ](https://www.linkedin.com/shareArticle?mini=true&title=Web+Scraping+avec+Crawlee+%26%238211%3B+Guide+%C3%A9tape+par+%C3%A9tape&url=https://brightdata.fr/blog/donnees-web/web-scraping-with-crawlee) [ ](http://www.reddit.com/submit?title=Web+Scraping+avec+Crawlee+%26%238211%3B+Guide+%C3%A9tape+par+%C3%A9tape&url=https://brightdata.fr/blog/donnees-web/web-scraping-with-crawlee)







##  Vous pourriez aussi être intéressé par

 [ ![Best web scraping tools blog image](https://media.brightdata.fr/2024/04/Best-web-scraping-tools-blog-image-1.svg) ](https://brightdata.fr/blog/donnees-web/best-web-scraping-tools "Les 10 meilleurs outils de web scraping de 2026")

 [Données Web



 ![Antonello Zanini](https://media.brightdata.fr/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Les 10 meilleurs outils de web scraping de 2026

Explorez les meilleurs outils de web scraping de 2026 à travers des comparaisons détaillées et un examen de leurs fonctionnalités, et découvrez comment choisir le bon outil pour une extraction de données efficace.



 10-Apr-2024

 19 min de lecture

 ](https://brightdata.fr/blog/donnees-web/best-web-scraping-tools)

 [ ![Dynamic website scraping](https://media.brightdata.fr/2023/04/Dynamic-Website-Scraping.svg) ](https://brightdata.fr/blog/savoir-faire/scrape-dynamic-websites-python "Web scraping de sites dynamiques avec Python")

 [How Tos









### Web scraping de sites dynamiques avec Python

Dans ce guide, vous apprendrez à utiliser le package Selenium de Python pour extraire des données de divers éléments HTML affichés sur YouTube et Hacker News.



 30-Apr-2023

 22 min de lecture

 ](https://brightdata.fr/blog/savoir-faire/scrape-dynamic-websites-python)

 [ ![Web scraping with Selenium guide](https://media.brightdata.fr/2022/05/Web-scraping-with-Selenium-guide2.svg) ](https://brightdata.fr/blog/savoir-faire/using-selenium-for-web-scraping "Guide pour effectuer du web scraping avec Selenium")

 [How Tos



 ![](https://media.brightdata.fr/2023/04/Davis-David-50x50.png)

Davis David





### Guide pour effectuer du web scraping avec Selenium

Il s’agit du seul guide pratique détaillé indispensable pour commencer à collecter des données web dans des sites cibles et les enregistrer sous forme de fichiers CSV en moins de 10 minutes



 26-May-2022

 6 min de lecture

 ](https://brightdata.fr/blog/savoir-faire/using-selenium-for-web-scraping)
