Firecrawl explore efficacement les sites web pour extraire des données complètes tout en contournant les blocages. Le processus :
- Analyse d’URL : Parcourt le sitemap et le site pour identifier les liens
- Parcours : Suit les liens de manière récursive afin de trouver toutes les sous-pages
- Scraping : Extrait le contenu de chaque page, en gérant le JavaScript et les limites de taux
- Résultats : Convertit les données en Markdown propre ou en format structuré
Cela garantit une collecte de données exhaustive à partir de n’importe quelle URL de départ.
point de terminaison /crawl
Permet d’explorer une URL et toutes les sous-pages accessibles. Soumet un travail d’exploration et renvoie un ID de tâche pour suivre l’état de l’exploration.
Par défaut, Crawl ignore les sous-liens d’une page s’ils ne sont pas des « enfants »
de l’URL fournie. Ainsi, website.com/other-parent/blog-1 ne sera pas
renvoyé si vous explorez website.com/blogs/. Si vous souhaitez
website.com/other-parent/blog-1, utilisez le paramètre crawlEntireDomain
. Pour
explorer des sous-domaines comme blog.website.com lors de l’exploration de website.com, utilisez le
paramètre allowSubdomains
.
# pip install firecrawl-py
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-VOTRE-CLE-API")
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-VOTRE_CLÉ_API")
docs = firecrawl.crawl(url="https://docs.firecrawl.dev", limit=10)
print(docs)
Options de scrape dans crawl
Toutes les options de l’endpoint Scrape sont disponibles dans Crawl via scrapeOptions
(JS) / scrape_options
(Python). Elles s’appliquent à chaque page que le crawler extrait : formats, proxy, mise en cache, actions, localisation, tags, etc. Consultez la liste complète dans la référence de l’API Scrape.
import Firecrawl from '@mendable/firecrawl-js';
const firecrawl = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });
// Crawl avec des options de scrape
const crawlResponse = await firecrawl.crawl('https://example.com', {
limit: 100,
scrapeOptions: {
formats: [
'markdown',
{
type: 'json',
schema: { type: 'object', properties: { title: { type: 'string' } } },
},
],
proxy: 'auto',
maxAge: 600000,
onlyMainContent: true,
},
});
Si vous utilisez cURL ou la méthode starter, cela renverra un ID
pour vérifier l’état du crawl.
Si vous utilisez le SDK, consultez les méthodes ci-dessous pour comprendre le comportement « waiter » vs « starter ».
{
"success": true,
"id": "123-456-789",
"url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}
Permet de consulter l’état d’un job de crawl et d’en récupérer le résultat.
Cet endpoint fonctionne uniquement pour les crawls en cours ou ceux qui viennent
de se terminer.
status = firecrawl.get_crawl_status("<crawl-id>")
print(status)
La réponse varie selon l’état du crawl.
Pour les crawls non terminés ou les réponses volumineuses dépassant 10 Mo, un paramètre d’URL next
est fourni. Vous devez appeler cette URL pour récupérer les 10 Mo de données suivants. Si le paramètre next
est absent, cela indique la fin des données du crawl.
Le paramètre skip définit le nombre maximal de résultats renvoyés pour chaque segment de résultats.
Les paramètres skip et next ne sont pertinents que lors d’appels directs à l’API.
Si vous utilisez le SDK, nous gérons cela pour vous et renverrons
tous les résultats en une seule fois.
{
"status": "scraping",
"total": 36,
"completed": 10,
"creditsUsed": 10,
"expiresAt": "2024-00-00T00:00:00.000Z",
"next": "https://api.firecrawl.dev/v2/crawl/123-456-789?skip=10",
"data": [
{
"markdown": "[Page d’accueil de la documentation Firecrawl !...",
"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": "Découvrez comment utiliser Firecrawl, Groq Llama 3 et LangChain pour créer un bot de « chat avec votre site web ».",
"ogLocaleAlternate": [],
"statusCode": 200
}
},
...
]
}
Deux approches sont possibles pour utiliser le SDK :
- Crawler puis attendre (
crawl
) :
- Attend la fin du crawl et renvoie la réponse complète
- Gère automatiquement la pagination
- Recommandé pour la plupart des cas d’usage
from firecrawl import Firecrawl, ScrapeOptions
firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")
# Explorer un site web :
crawl_status = firecrawl.crawl(
'https://firecrawl.dev',
limit=100,
scrape_options=ScrapeOptions(formats=['markdown', 'html']),
poll_interval=30
)
print(crawl_status)
La réponse inclut l’état du crawl et toutes les données extraites :
success=True
status='completed'
completed=100
total=100
creditsUsed=100
expiresAt=datetime.datetime(2025, 4, 23, 19, 21, 17, tzinfo=TzInfo(UTC))
next=None
data=[
Document(
markdown='[Jour 7 - Semaine de lancement III. Journée des intégrations — du 14 au 20 avril](...',
metadata={
'title': '15 projets de web scraping en Python : du niveau débutant à avancé',
...
'scrapeId': '97dcf796-c09b-43c9-b4f7-868a7a5af722',
'sourceURL': 'https://www.firecrawl.dev/blog/python-web-scraping-projects',
'url': 'https://www.firecrawl.dev/blog/python-web-scraping-projects',
'statusCode': 200
}
),
...
]
- Démarrer puis vérifier l’état (
startCrawl
/start_crawl
) :
- Renvoie immédiatement un ID de crawl
- Permet une vérification manuelle de l’état
- Utile pour les crawls de longue durée ou une logique de polling personnalisée
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")
job = firecrawl.start_crawl(url="https://docs.firecrawl.dev", limit=10)
print(job)
# Vérifier l’état de l’exploration
status = firecrawl.get_crawl_status(job.id)
print(status)
La méthode WebSocket de Firecrawl, « Crawl URL and Watch », permet l’extraction et la supervision des données en temps réel. Lancez un crawl à partir d’une URL et personnalisez-le avec des options comme des limites de pages, des domaines autorisés et des formats de sortie — idéal pour le traitement immédiat des données.
import asyncio
from firecrawl import AsyncFirecrawl
async def main():
firecrawl = AsyncFirecrawl(api_key="fc-YOUR-API-KEY")
# Démarrer d'abord un crawl
started = await firecrawl.start_crawl("https://firecrawl.dev", limit=5)
# Surveiller les mises à jour (instantanés) jusqu'au statut final
async for snapshot in firecrawl.watcher(started.id, kind="crawl", poll_interval=2, timeout=120):
if snapshot.status == "completed":
print("DONE", snapshot.status)
for doc in snapshot.data:
print("DOC", doc.metadata.source_url if doc.metadata else None)
elif snapshot.status == "failed":
print("ERR", snapshot.status)
else:
print("STATUS", snapshot.status, snapshot.completed, "/", snapshot.total)
asyncio.run(main())
Vous pouvez configurer des webhooks pour recevoir des notifications en temps réel à mesure que votre crawl progresse. Cela vous permet de traiter les pages dès leur extraction, au lieu d’attendre la fin du crawl.
curl -X POST https://api.firecrawl.dev/v2/crawl \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_API_KEY>' \
-d '{
"url": "https://docs.firecrawl.dev",
"limit": 100,
"webhook": {
"url": "https://your-domain.com/webhook",
"metadata": {
"any_key": "any_value"
},
"events": ["started", "page", "completed"]
}
}'
Pour une documentation complète sur les webhooks, incluant les types d’événements, la structure des payloads et des exemples d’implémentation, consultez la documentation Webhooks.
Types d’événements :
crawl.started
- Au début de l’exploration
crawl.page
- Pour chaque page extraite avec succès
crawl.completed
- À la fin de l’exploration
crawl.failed
- Si l’exploration échoue
Charge utile de base :
{
"success": true,
"type": "crawl.page",
"id": "crawl-job-id",
"data": [...], // Données de page pour les événements 'page'
"metadata": {}, // Vos métadonnées personnalisées
"error": null
}
Pour une configuration détaillée des webhooks, les meilleures pratiques de sécurité et
la résolution des problèmes, consultez la documentation sur les webhooks.