Firecrawl explore efficacement les sites web pour extraire des données complètes tout en contournant les blocages. Le processus :
- Analyse de l’URL : Analyse le sitemap et parcourt le site pour identifier les liens
- Exploration : Suit les liens de façon récursive pour trouver toutes les sous-pages
- Scraping : Extrait le contenu de chaque page, en gérant le JavaScript et les limites de débit
- 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 ses sous-pages accessibles. Cette opération crée une tâche de crawl et renvoie un ID de tâche pour suivre l’état du crawl.
Par défaut, le 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 avez crawlé website.com/blogs/. Si vous souhaitez inclure website.com/other-parent/blog-1, utilisez le paramètre crawlEntireDomain
. Pour explorer des sous-domaines comme blog.website.com lors du crawl 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 scraping dans crawl
Toutes les options du point de terminaison /scrape sont disponibles dans crawl via scrapeOptions
(JS) / scrape_options
(Python). Elles s’appliquent à chaque page que le crawler récupère : 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 with scrape options
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, un ID
sera renvoyé 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"
}
Vérifier une tâche de crawl
Permet de vérifier l’état d’une tâche de crawl et d’obtenir son résultat.
Ce point de terminaison 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 réponses non terminées ou 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 signifie que vous avez atteint la fin des données du crawl.
Le paramètre skip définit le nombre maximal de résultats renvoyés pour chaque lot de résultats.
Les paramètres skip et next ne sont pertinents que lorsque vous appelez directement l’API. Si vous utilisez le SDK, nous gérons cela pour vous et renvoyons 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)
# Check the status of the crawl
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 un crawl d’abord
started = await firecrawl.start_crawl("https://firecrawl.dev", limit=5)
# Suivre les mises à jour (snapshots) jusqu’au statut final
async for snapshot in firecrawl.watcher(started.id, kind="crawl", poll_interval=2, timeout=120):
if snapshot.status == "completed":
print("TERMINE", snapshot.status)
for doc in snapshot.data:
print("DOC", doc.metadata.sourceURL if doc.metadata else None)
elif snapshot.status == "failed":
print("ERREUR", snapshot.status)
else:
print("STATUT", 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 avance. Cela vous permet de traiter les pages dès qu’elles sont extraites, au lieu d’attendre la fin complète 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 charges utiles et des exemples d’implémentation, consultez la documentation sur les 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 rencontre une erreur
Payload 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 des informations détaillées sur la configuration des webhooks, les bonnes pratiques de sécurité et le dépannage, consultez la documentation sur les webhooks.