> ## Documentation Index
> Fetch the complete documentation index at: https://student-213fb9fc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Scrape par lots

> Scraper plusieurs URL par lots

<div id="batch-scraping-multiple-urls">
  ## Extraction en lot de plusieurs URL
</div>

Vous pouvez désormais extraire en lot plusieurs URL simultanément. La fonction prend les URL de départ et des paramètres optionnels comme arguments. L’argument params vous permet de définir des options supplémentaires pour le traitement en lot, telles que les formats de sortie.

<div id="how-it-works">
  ### Fonctionnement
</div>

C’est très similaire au fonctionnement du point de terminaison `/crawl`. Vous pouvez soit lancer le lot et attendre qu’il se termine, soit le lancer et gérer vous‑même sa finalisation.

* `batchScrape` (JS) / `batch_scrape` (Python) : lance un lot et attend sa fin, puis renvoie les résultats.
* `startBatchScrape` (JS) / `start_batch_scrape` (Python) : lance un lot et renvoie l’ID du job pour que vous puissiez effectuer du polling ou utiliser des webhooks.

<div id="concurrency">
  ### Concurrence
</div>

Par défaut, un job de scraping par lot utilise l'intégralité de la limite de navigateurs concurrents de votre équipe (voir [Rate Limits](/fr/rate-limits)). Vous pouvez la réduire pour chaque job avec le paramètre `maxConcurrency` — par exemple, `maxConcurrency: 50` limite ce job à 50 opérations de scraping simultanées. Fixer une valeur trop basse pour de gros lots ralentira significativement le traitement, donc ne la réduisez que si vous devez conserver de la capacité pour d'autres jobs concurrents.

<div id="usage">
  ### Utilisation
</div>

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

  start = firecrawl.start_batch_scrape([
      "https://firecrawl.dev",
      "https://docs.firecrawl.dev",
  ], formats=["markdown"])  # renvoie un identifiant

  job = firecrawl.batch_scrape([
      "https://firecrawl.dev",
      "https://docs.firecrawl.dev",
  ], formats=["markdown"], poll_interval=2, wait_timeout=120)

  print(job.status, job.completed, job.total)
  ```

  ```js Node.js theme={null}
  import Firecrawl from '@mendable/firecrawl-js';

  const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

  // Démarrer une extraction par lots
  const { id } = await firecrawl.startBatchScrape([
    'https://firecrawl.dev',
    'https://docs.firecrawl.dev'
  ], {
    options: { formats: ['markdown'] },
  });

  // Attendre la fin du traitement
  const job = await firecrawl.batchScrape([
    'https://firecrawl.dev',
    'https://docs.firecrawl.dev'
  ], { options: { formats: ['markdown'] }, pollInterval: 2, timeout: 120 });

  console.log(job.status, job.completed, job.total);
  ```

  ```bash cURL theme={null}
  curl -s -X POST "https://api.firecrawl.dev/v2/batch/scrape" \
    -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "urls": ["https://firecrawl.dev", "https://docs.firecrawl.dev"],
      "formats": ["markdown"]
    }'
  ```
</CodeGroup>

### Réponse

Appeler `batchScrape`/`batch_scrape` renvoie les résultats complets une fois le lot terminé.

```json Terminé theme={null}
{
  "status": "terminée",
  "total": 36,
  "completed": 36,
  "creditsUsed": 36,
  "expiresAt": "2024-00-00T00:00:00.000Z",
  "next": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789?skip=26",
  "data": [
    {
      "markdown": "[Page d’accueil de la documentation Firecrawl![logo clair](https://mintlify.s3-us-west-1.amazonaws.com/firecrawl/logo/light.svg)!...",
      "html": "<!DOCTYPE html><html lang=\"en\" class=\"js-focus-visible lg:[--scroll-mt:9.5rem]\" data-js-focus-visible=\"\">...",
      "metadata": {
        "title": "Créer un « chat avec un site web » avec Groq Llama 3 | Firecrawl",
        "language": "en",
        "sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
        "description": "Apprenez à utiliser Firecrawl, Groq Llama 3 et LangChain pour créer un bot « discuter avec votre site web ».",
        "ogLocaleAlternate": [],
        "statusCode": 200
      }
    },
    ...
  ]
}
```

Appeler `startBatchScrape`/`start_batch_scrape` renvoie
un ID de tâche que vous pouvez suivre via `getBatchScrapeStatus`/`get_batch_scrape_status`, en utilisant
le point de terminaison API `/batch/scrape/{id}` ou des webhooks. Les résultats de la tâche sont accessibles via l'API pendant 24 heures après son achèvement. Passé ce délai, vous pouvez toujours consulter l'historique et les résultats de vos batch scrapes dans les [journaux d'activité](https://www.firecrawl.dev/app/logs).

```json theme={null}
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}
```

<div id="batch-scrape-with-structured-extraction">
  ## Grattage en lot avec extraction structurée
</div>

Vous pouvez aussi utiliser le point de terminaison de grattage en lot pour extraire des données structurées depuis les pages. C’est utile si vous voulez obtenir les mêmes données structurées à partir d’une liste d’URL.

<CodeGroup>
  ```python Python theme={null}
  from firecrawl import Firecrawl

  firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")

  # Récupérer plusieurs sites web :
  batch_scrape_result = firecrawl.batch_scrape(
      ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], 
      formats=[{
          'type': 'json',
          'prompt': 'Extrait le titre et la description de la page.',
          'schema': {
              'type': 'object',
              'properties': {
                  'title': {'type': 'string'},
                  'description': {'type': 'string'}
              },
              'required': ['title', 'description']
          }
      }]
  )
  print(batch_scrape_result)

  # Ou vous pouvez utiliser la méthode start :
  batch_scrape_job = firecrawl.start_batch_scrape(
      ['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], 
      formats=[{
          'type': 'json',
          'prompt': 'Extrait le titre et la description de la page.',
          'schema': {
              'type': 'object',
              'properties': {
                  'title': {'type': 'string'},
                  'description': {'type': 'string'}
              },
              'required': ['title', 'description']
          }
      }]
  )
  print(batch_scrape_job)

  # Vous pouvez ensuite utiliser l’ID du job pour vérifier l’état du batch scrape :
  batch_scrape_status = firecrawl.get_batch_scrape_status(batch_scrape_job.id)
  print(batch_scrape_status)
  ```

  ```js Node theme={null}
  import Firecrawl, { ScrapeResponse } from '@mendable/firecrawl-js';

  const firecrawl = new Firecrawl({apiKey: "fc-YOUR_API_KEY"});

  // Définir le schéma d’extraction du contenu
  const schema = {
    type: "object",
    properties: {
      title: { type: "string" },
      description: { type: "string" }
    },
    required: ["title", "description"]
  };

  // Récupérer le contenu de plusieurs sites web (synchrone) :
  const batchScrapeResult = await firecrawl.batchScrape(['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], { 
    formats: [
      {
        type: "json",
        prompt: "Extraire le titre et la description de la page.",
        schema: schema
      }
    ]
  });

  // Afficher tous les résultats de l’extraction par lots :
  console.log(batchScrapeResult)

  // Ou utiliser la méthode start :
  const batchScrapeJob = await firecrawl.startBatchScrape(['https://docs.firecrawl.dev', 'https://docs.firecrawl.dev/sdks/overview'], { 
    formats: [
      {
        type: "json",
        prompt: "Extraire le titre et la description de la page.",
        schema: schema
      }
    ]
  });
  console.log(batchScrapeJob)

  // Vous pouvez ensuite utiliser l’ID de la tâche pour vérifier l’état de l’extraction par lots :
  const batchScrapeStatus = await firecrawl.getBatchScrapeStatus(batchScrapeJob.id);
  console.log(batchScrapeStatus)
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.firecrawl.dev/v2/batch/scrape \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer VOTRE_CLE_API' \
      -d '{
        "urls": ["https://docs.firecrawl.dev", "https://docs.firecrawl.dev/sdks/overview"],
        "formats" : [{
          "type": "json",
          "prompt": "Extrait le titre et la description de la page.",
          "schema": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "title",
              "description"
            ]
          }
        }]
      }'
  ```
</CodeGroup>

<div id="response">
  ### Réponse
</div>

`batchScrape`/`batch_scrape` retourne les résultats complets :

```json Terminé theme={null}
{
  "status": "completed",
  "total": 36,
  "completed": 36,
  "creditsUsed": 36,
  "expiresAt": "2024-00-00T00:00:00.000Z",
  "next": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789?skip=26",
  "data": [
    {
      "json": {
        "title": "Créer un « chat avec un site web » avec Groq Llama 3 | Firecrawl",
        "description": "Découvrez comment utiliser Firecrawl, Groq Llama 3 et LangChain pour créer un bot de « chat avec votre site web »."
      }
    },
    ...
  ]
}
```

`startBatchScrape`/`start_batch_scrape` retourne un ID de tâche :

```json theme={null}
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}
```

<div id="batch-scrape-with-webhooks">
  ## Récupération en lot avec webhooks
</div>

Vous pouvez configurer des webhooks pour recevoir des notifications en temps réel à mesure que chaque URL de votre lot est récupérée. Cela vous permet de traiter les résultats immédiatement, sans attendre la fin de l’ensemble du lot.

```bash cURL theme={null}
curl -X POST https://api.firecrawl.dev/v2/batch/scrape \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer VOTRE_CLÉ_API' \
    -d '{
      "urls": [
        "https://example.com/page1",
        "https://example.com/page2",
        "https://example.com/page3"
      ],
      "webhook": {
        "url": "https://your-domain.com/webhook",
        "metadata": {
          "any_key": "n_importe_quelle_valeur"
        },
        "events": ["démarrage", "page", "terminé"]
      }
    }'
```

<div id="quick-reference">
  ### Référence rapide
</div>

**Types d’événements :**

* `batch_scrape.started` - Lorsque le scraping par lot démarre
* `batch_scrape.page` - Pour chaque URL extraite avec succès
* `batch_scrape.completed` - Lorsque toutes les URL sont traitées
* `batch_scrape.failed` - Si le scraping par lot rencontre une erreur

**Charge utile de base :**

```json theme={null}
{
  "success": true,
  "type": "batch_scrape.page",
  "id": "batch-job-id",
  "data": [...], // Données de page pour les événements 'page'
  "metadata": {}, // Your custom metadata
  "error": null
}
```

<div id="security-verifying-webhook-signatures">
  ### Sécurité : vérification des signatures de webhook
</div>

Chaque requête de webhook provenant de Firecrawl inclut un en-tête `X-Firecrawl-Signature` contenant une signature HMAC-SHA256. **Vérifiez toujours cette signature** pour vous assurer que le webhook est authentique et n'a pas été altéré.

**Fonctionnement :**

1. Récupérez votre secret de webhook dans l'[onglet Advanced](https://www.firecrawl.dev/app/settings?tab=advanced) des paramètres de votre compte
2. Extrayez la signature depuis l'en-tête `X-Firecrawl-Signature`
3. Calculez le HMAC-SHA256 du corps brut de la requête en utilisant votre secret
4. Comparez-la à l'en-tête de signature à l'aide d'une fonction sécurisée vis-à-vis du temps d'exécution (timing-safe)

<Warning>
  Ne traitez jamais un webhook sans vérifier d'abord sa signature. L'en-tête `X-Firecrawl-Signature` contient la signature au format : `sha256=abc123def456...`
</Warning>

Pour des exemples d'implémentation complets en JavaScript et Python, consultez la [documentation sur la sécurité des webhooks](/fr/webhooks/security).

<div id="full-documentation">
  ### Documentation complète
</div>

Pour une documentation complète sur les webhooks, incluant des payloads d’événements détaillés, une configuration avancée et des conseils de dépannage, consultez la [documentation sur les webhooks](/fr/webhooks/overview).
