00:00:00Quand on a besoin d'un scraper pour le RAG, le problème n'est pas d'obtenir les données,
00:00:03mais de les nettoyer.
00:00:04Le JavaScript casse tout, l'HTML est bordélique,
00:00:07et on perd un temps fou à essayer de rendre ça utilisable pour l'IA.
00:00:11La solution à tout ça, c'est CrawlForAI.
00:00:13C'est conçu pour l'IA, c'est asynchrone,
00:00:15ça gère le JavaScript et génère du Markdown ou du JSON propre,
00:00:18et c'est jusqu'à six fois plus rapide que les scrapers Python classiques comme Scrapy.
00:00:23On obtient des données prêtes pour le modèle plus vite que jamais.
00:00:26Comment ça marche ? En quoi est-ce différent ?
00:00:29Ce sont les questions qu'on va poser.
00:00:30[MUSIQUE]
00:00:35Alors, qu'est-ce que CrawlForAI exactement ?
00:00:37Au premier abord, ça ressemble à un simple crawler Python de plus,
00:00:40mais il n'est pas fait pour le scraping, il est fait pour l'IA.
00:00:43Voici la différence.
00:00:44La plupart des crawlers nous donnent du HTML brut,
00:00:46CrawlForAI fournit du Markdown propre ou du JSON structuré prêt pour un LLM.
00:00:52Il gère le JavaScript avec Playwright,
00:00:54il tourne en asynchrone pour pouvoir monter en charge,
00:00:57et il a un mode “prefetch” qui évite le rendu lourd quand on n'a besoin que des liens.
00:01:01Et c'est crucial, car si on construit des chatbots,
00:01:04des assistants ou des agents, notre souci n'est pas de crawler,
00:01:08mais de transformer ces pages web confuses en données exploitables.
00:01:11CrawlForAI élimine ce problème, et rapidement.
00:01:15Si vous aimez ce genre de contenu, n'oubliez pas de vous abonner.
00:01:18Nous sortons des vidéos régulièrement.
00:01:20Commençons simplement. Voici le crawl le plus basique que j'ai lancé.
00:01:23J'ai récupéré l'essentiel dans leur repo et leur doc,
00:01:25et j'ai juste modifié quelques lignes pour le faire tourner.
00:01:28J'ai importé AsyncWebCrawler qui gère les requêtes asynchrones pour les pipelines d'IA.
00:01:34Ensuite, j'appelle “run” sur une URL d'actu tech, c'est tout.
00:01:38Maintenant, regardez le résultat.
00:01:40Ce n'est pas du HTML brut qu'on récupère,
00:01:43c'est du Markdown ou du JSON impeccable.
00:01:45Titres structurés, liens préservés,
00:01:47et en arrière-plan, il récupère la page,
00:01:50analyse le DOM, supprime le bruit,
00:01:52et classe le contenu pour garder l'essentiel sans le jargon inutile.
00:01:57Si on doit créer un résumeur d'actus ou un prototype RAG,
00:02:02on n'a plus besoin d'écrire des scripts de nettoyage,
00:02:04on envoie ça directement dans le modèle.
00:02:07On s'attendait à du scraping classique, comme avec n'importe quel outil,
00:02:11mais on obtient en fait des données déjà préparées.
00:02:14Cet écart, c'est du temps gagné.
00:02:17Et ça devient encore plus intéressant par la suite.
00:02:19En testant l'outil,
00:02:20on pourrait croire qu'il faut rendre chaque page.
00:02:23Ce n'est pas nécessaire. Regardez bien.
00:02:25C'est le même crawler,
00:02:27mais on active l'option “prefetch”.
00:02:30Je vais tester sur Hacker News.
00:02:31Voyez comme c'est rapide ?
00:02:33La vitesse d'exécution est vraiment impressionnante.
00:02:35Au lieu de rendre chaque page,
00:02:37il récupère d'abord les liens,
00:02:38via une simple extraction asynchrone.
00:02:39Pour créer un agrégateur, c'est génial.
00:02:42On cible d'abord ce dont on a besoin,
00:02:44puis on l'extrait plus tard.
00:02:45On ne crawle pas tout bêtement,
00:02:47seulement l'utile.
00:02:48Cette différence d'approche change tout
00:02:50quand on gère des centaines ou des milliers d'URLs.
00:02:52Parlons maintenant du côté mise en production.
00:02:55Je lance un crawl profond via une stratégie BFS.
00:02:58C'est leur propre version de l'approche BFS.
00:03:01Je définis ici un état de reprise (resume state),
00:03:03et j'ajoute un rappel (callback) de changement d'état.
00:03:07Je lance le crawl,
00:03:08puis j'arrête brutalement le processus.
00:03:10Avec la plupart des outils, quand on tue le processus,
00:03:13il faut tout recommencer de zéro.
00:03:14Mais quand je le relance, regardez,
00:03:16il redémarre via l'état JSON sauvegardé,
00:03:19et reprend exactement là où il s'était arrêté.
00:03:22Pour créer une grosse base de connaissances RAG,
00:03:24un plantage n'est plus un drame.
00:03:26D'habitude, ça coûte juste cher.
00:03:29Ici, ça repart tout seul.
00:03:30La fonction que peu de scrapers possèdent, c'est l'extraction sémantique.
00:03:35Si je définis un schéma avec Pydantic,
00:03:37type poste, entreprise, salaire,
00:03:39je vais scraper Indeed.
00:03:40Je configure leur stratégie d'extraction par LLM
00:03:44avec une instruction et un fournisseur.
00:03:46Je le lance sur Indeed,
00:03:48le site d'offres d'emploi,
00:03:49et regardez le résultat.
00:03:51C'est vraiment excellent.
00:03:52Un JSON structuré avec des champs propres,
00:03:54et voici ce qu'il se passe.
00:03:56CrawlForAI convertit la page,
00:03:58comme je l'ai dit, en Markdown ou JSON au choix.
00:04:01Puis il l'envoie à un modèle.
00:04:03Le modèle le structure selon votre schéma.
00:04:06Il ne se contente pas de scraper du texte,
00:04:07il extrait précisément ce qu'on veut.
00:04:09Le LLM peut maintenant gérer ça facilement.
00:04:11C'est un tout autre niveau de capacité pour les outils de type LLM.
00:04:15C'est génial,
00:04:16mais prenons un peu de recul.
00:04:18Les points positifs : c'est rapide.
00:04:20Très rapide, jusqu'à six fois plus selon les benchmarks.
00:04:22Ça gère le JavaScript automatiquement.
00:04:24C'est asynchrone, évolutif,
00:04:26et ça reprend après un crash.
00:04:28Mais le plus gros point fort,
00:04:29c'est l'intégration directe des LLM.
00:04:32En plus, c'est open source.
00:04:33Un simple “pip install” et c'est prêt à l'emploi.
00:04:35Maintenant, comme pour tout,
00:04:36il y a des compromis.
00:04:38C'est uniquement en Python.
00:04:39Vous l'utilisez peut-être, peut-être pas.
00:04:41Ça peut être un inconvénient.
00:04:42Les fonctions LLM demandent des clés API, sauf si vous lancez des modèles locaux comme Ollama.
00:04:46Le crawling peut toujours subir des limites de débit,
00:04:49et comme tout projet open source qui bouge vite,
00:04:51il faut faire les mises à jour régulièrement.
00:04:53Il y a des nouveautés tout le temps.
00:04:54Mais pour les développeurs portés sur l'IA,
00:04:56ça enlève énormément de frustrations,
00:04:58surtout dans les pipelines RAG.
00:05:00Comparons-le avec ce que vous utilisez déjà.
00:05:03Scrapy, si vous venez de l'univers Python.
00:05:05C'est super pour les gros crawls statiques,
00:05:07mais c'est basé sur des règles et très lourd en code redondant.
00:05:10Franchement, c'est long à mettre en place.
00:05:13Si vous voulez une extraction LLM sur du Markdown,
00:05:16vous allez devoir créer des couches personnalisées.
00:05:17Avec CrawlForAI, c'est intégré d'office.
00:05:19Il y a aussi Beautiful Soup.
00:05:21C'est très léger, trop simple même,
00:05:23car ce n'est au fond qu'un analyseur.
00:05:25Il n'y a pas de moteur de crawl,
00:05:26ni de rendu JavaScript.
00:05:28On finit par bricoler un assemblage de plusieurs outils.
00:05:31Et enfin, le gros morceau : Selenium.
00:05:33Ça rend le JavaScript, d'accord,
00:05:36mais c'est plus lent et plus manuel.
00:05:38Gérer des flux asynchrones à grande échelle reste une galère.
00:05:42CrawlForAI encapsule Playwright en interne
00:05:44et propose une API asynchrone claire.
00:05:46Si vous faites des crawlers traditionnels par règles
00:05:48pour des données statiques,
00:05:49vos outils actuels feront très bien l'affaire.
00:05:52Mais si vous construisez des systèmes d'IA,
00:05:54des pipelines RAG ou des agents autonomes,
00:05:56CrawlForAI est taillé sur mesure pour ce monde,
00:06:00et c'est un outil IA vraiment génial.
00:06:02Il ne fait pas que crawler, il prépare les données,
00:06:04exactement comme le LLM en a besoin.
00:06:06Voilà pour CrawlForAI.
00:06:08Si vous vous intéressez à l'IA, ça vaut le détour.
00:06:11Sa rapidité m'a vraiment bluffé.
00:06:14Et c'est vraiment pratique
00:06:15quand on crée des pipelines de type RAG,
00:06:17on peut envoyer ces données proprement dans nos LLM.
00:06:20On se retrouve dans une prochaine vidéo.