Crawlee for Python

Crawlee for Python

Portage Python de Crawlee, bâti sur asyncio

Crawlee for Python est la version Python de Crawlee, la bibliothèque de crawl qu'Apify a d'abord écrite pour Node.js. Un crawler part d'une liste d'URL, les range dans une file de requêtes persistante, appelle un handler pour chaque page et écrit ce qu'il extrait dans un dataset. Le tout reste un script Python ordinaire, bâti sur asyncio et typé.

BeautifulSoupCrawler et ParselCrawler téléchargent les pages par HTTP, sans navigateur. PlaywrightCrawler pilote Chromium, Firefox, WebKit ou Chrome pour les sites qui construisent leur contenu en JavaScript, et AdaptivePlaywrightCrawler apprend, au fil des pages, lesquelles peuvent se passer du navigateur.

Le comparatif des outils de web scraping open source range Crawlee for Python parmi les frameworks de crawl, à côté des navigateurs anti-détection et des rotateurs de proxies.

Extraction par LLM et table de migration depuis Scrapy

  • Une API pour HTTP et navigateur : même router, même enqueue_links, même push_data. Passer de ParselCrawler à PlaywrightCrawler change la classe et la lecture de la page, pas l'organisation du code.
  • Un client HTTP qui imite un navigateur : impit, bibliothèque Rust d'Apify, est le client par défaut ; httpx2 ou curl-cffi le remplacent par un paramètre.
  • Empreintes actives par défaut : PlaywrightCrawler donne à chaque contexte de navigation une empreinte et des en-têtes HTTP qui concordent. Pour les sites mieux protégés, la documentation branche Camoufox ou CloakBrowser sur le même crawler.
  • Proxies par paliers : tiered_proxy_urls range les proxies du moins cher au plus fiable, et le crawler reste au palier le plus bas qui ne se fait pas bloquer.
  • Extraction par LLM : PydanticAiCrawler remplit un modèle Pydantic à partir de la page, avec tout fournisseur pris en charge par Pydantic AI. StagehandCrawler pilote le navigateur par des instructions en langage naturel.
  • Une table de passage depuis Scrapy : le guide de migration associe chaque concept Scrapy (spider, item pipelines, AutoThrottle, scrapy-playwright) à son équivalent.

Puppeteer absent, stockages SQL et Redis encore expérimentaux

La version Node a servi de modèle, Puppeteer en moins. Les classes reprennent les noms de Crawlee pour Node.js (BasicCrawler, RequestQueue, SessionPool, ProxyConfiguration), et la file de requêtes a été alignée sur son implémentation « Request Queue V2 ». Le seul pilote de navigateur est Playwright, plus Stagehand limité à Chromium : il n'existe pas de PuppeteerCrawler. Les empreintes passent par la bibliothèque browserforge, là où Node utilise la fingerprint-suite d'Apify.

Python a des stockages que Node n'a pas. Crawlee 3.18 pour Node garde son état en mémoire et le recopie sur disque. La version Python ajoute SQL (SQLite, PostgreSQL, MySQL, MariaDB) et Redis 8, ses deux stockages intégrés qui acceptent plusieurs processus sur les mêmes données, tous deux marqués expérimentaux. Le stockage par fichiers, utilisé par défaut, n'est pas sûr dès que deux processus y accèdent, et purge_on_start le vide à chaque lancement : pour reprendre un crawl interrompu, il faut passer ce réglage à False.

Les deux versions divergent avec la v4 Node. Crawlee pour Node est en release candidate de sa v4 depuis le 13 août 2026 : elle remplace les paliers de proxies par une rotation par session et exige Node 22.13. La version Python, en 1.10, garde tiered_proxy_urls.

Crawlee ne fournit aucune IP. ProxyConfiguration fait tourner les URL qu'on lui donne. Un pool auto-hébergé comme Rota se présente à lui comme une seule URL, et c'est alors Rota qui choisit l'IP de sortie. La plateforme d'Apify (exécution, stockage, proxies, planification) demande un compte ; Crawlee tourne sans, sous licence Apache-2.0.

Python 3.10 et des navigateurs à télécharger. Le paquet crawlee s'installe avec les extras voulus (parsel, playwright ou all), puis playwright install récupère les navigateurs. Par défaut, l'autoscaling ne s'accorde que 25 % de la mémoire disponible.

Une version par semaine ou presque. Le dépôt date de janvier 2024. La branche 1.x compte 35 versions, de la 1.0.0 du 29 septembre 2025 à la 1.10.4 du 6 octobre 2026.