Skip to content
Projets

D4Vinci/Scrapling has 98,904 GitHub stars and 10,362 forks. GitHot measured +739 stars in 24 hours, +8,089 in 7 days, and +9,583 in 15 days. Last checked 2026-11-07 03:57 UTC. Last push 2026-11-01.

Comment ces chiffres sont mesurés

đŸ•·ïž Le meilleur framework de scraping web, capable de tout gĂ©rer, d’une simple requĂȘte Ă  un crawl Ă  grande Ă©chelle ! Rejoignez la communautĂ© : https://discord.gg/EMgGbDceNQ et suivez-nous pour dĂ©couvrir des conseils et astuces chaque jour : https://x.com/Scrapling_dev

What you can do

  • Fetch & interact: Fast HTTP requests, stealth browsers, JavaScript rendering, Cloudflare Turnstile/Interstitial handling, persistent sessions, and background API capture.
  • Parse & extract: CSS, XPath, text and regex search, adaptive element tracking, similar-element matching, and clean Markdown output.
  • Crawl & export: Concurrent spiders, proxy rotation, retries, AutoThrottle, pause/resume, streaming, ready-made templates, and JSON/JSONL/CSV/XML exports.
  • Scrape with AI or from your terminal: An MCP server for AI agents to browse and extract data, an Agent Skill, CLI commands, and an interactive shell.

Progression mesurée des étoiles

in 24h
+739
in 7 days
+8 089
in 15 days
+9 583
in 1 month
Historique en cours

Variations nettes sur des pĂ©riodes qui se chevauchent, pas des totaux quotidiens. Les mesures absentes restent vides. Les Ă©toiles indiquent l’intĂ©rĂȘt, pas la qualitĂ©.

docs/README_FR.md

Original

Couverture de Scrapling
Extrayez simplement les données du web moderne

Tests Version sur PyPI Téléchargements Docker Téléchargements du paquet sur PyPI Badge Agent Skill Skill pour OpenClaw
Discord Suivre sur X (anciennement Twitter)
Versions de Python compatibles

Méthodes de sélection · Fetchers · Spiders · Rotation des proxies · CLI · MCP

Scrapling est un framework de web scraping pour Python. Il rĂ©unit des requĂȘtes HTTP rapides, des navigateurs furtifs, l’analyse de pages et l’exploration simultanĂ©e de sites dans une seule bibliothĂšque.

Extrayez les donnĂ©es de pages statiques, exĂ©cutez JavaScript, interagissez avec les sites et accĂ©dez aux API qu’ils utilisent. CrĂ©ez des crawlers avec des sessions rĂ©utilisables, la rotation des proxies, de nouvelles tentatives automatiques, la pause et la reprise, et des exports intĂ©grĂ©s.

Utilisez Scrapling depuis Python, le terminal ou votre agent IA grñce au serveur MCP et à l’Agent Skill. Il couvre tout le processus, de l’extraction de quelques champs à l’enregistrement d’un site entier en fichiers Markdown propres.

Ce que vous pouvez faire avec Scrapling

  • RĂ©cupĂ©rer des pages et interagir : RequĂȘtes HTTP rapides, navigateurs furtifs, exĂ©cution de JavaScript, gestion de Cloudflare Turnstile et Interstitial, sessions persistantes et capture des rĂ©ponses des API en arriĂšre-plan.
  • Analyser et extraire : Recherche par CSS, XPath, texte et expressions rĂ©guliĂšres, suivi des Ă©lĂ©ments aprĂšs un changement de page, recherche d’élĂ©ments similaires et sortie en Markdown propre.
  • Explorer et exporter : Spiders simultanĂ©s, rotation des proxies, nouvelles tentatives, AutoThrottle, pause et reprise, rĂ©sultats en streaming, modĂšles prĂȘts Ă  l’emploi et exports en JSON, JSONL, CSV et XML.
  • Extraire avec l’IA ou depuis le terminal : Un serveur MCP pour que les agents IA naviguent et extraient des donnĂ©es, une Agent Skill, des commandes CLI et un shell interactif.

Commencez par une seule page :

from scrapling.fetchers import Fetcher

page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text').getall()
print(quotes)

Ou extrayez plus de donnĂ©es avec un spider :

from scrapling.spiders import Spider, Response

class QuotesSpider(Spider):
    name = "quotes"
    start_urls = ["https://quotes.toscrape.com/"]

    async def parse(self, response: Response):
        for quote in response.css('.quote'):
            yield {
                "text": quote.css('.text::text').get(),
                "author": quote.css('.author::text').get(),
            }

result = QuotesSpider().start()
print(len(result.items))
result.items.to_json("quotes.json")

Cet exemple affiche 10 et enregistre les citations et leurs auteurs dans quotes.json.

At DataImpulse, we specialize in developing custom proxy services for your business. Make requests from anywhere, collect data, and enjoy fast connections with our premium proxies.

Sponsors Platine

NodeMaven - le fournisseur de proxys le plus efficace pour le Web Scraping et l'automatisation, avec la meilleure qualitĂ© d'IP du marchĂ©. Utilisez le code SCRAPLING35 pour obtenir 35 % de rĂ©duction.
Scrapling gÚre Cloudflare Turnstile. Pour une protection de niveau entreprise, Hyper Solutions fournit des endpoints API qui génÚrent des tokens antibot valides pour Akamai, DataDome, Kasada et Incapsula. De simples appels API, sans automatisation de navigateur.
Evomi  : proxies rĂ©sidentiels Ă  partir de 0,49 $/Go. Navigateur de scraping avec Chromium dont l’empreinte est entiĂšrement modifiĂ©e, IPs rĂ©sidentielles, rĂ©solution automatique de CAPTCHA et contournement anti-bot.
API Scraper pour des résultats sans tracas. Intégrations MCP et N8N disponibles.
Lisez une critique complÚte de Scrapling sur The Web Scraping Club (nov. 2025), la newsletter n°1 dédiée au Web Scraping.
Swiftproxy propose des proxys résidentiels évolutifs avec plus de 80 millions d'IPs dans plus de 195 pays, offrant des connexions rapides et fiables, une rotation automatique et des fonctions pour éviter les blocages. Essai gratuit disponible.
Byteful fournit des proxys rĂ©sidentiels, mobiles, ISP et de centres de donnĂ©es issus de sources Ă©thiques, ainsi que des outils de scraping et d’automatisation par IA. Utilisez le code SCRAPLING10 pour obtenir 10 % de rĂ©duction sur les proxys rĂ©sidentiels.
ProxyLane : 90 % de CAPTCHAs en moins lors de vos exĂ©cutions de Scrapling. 28 millions d’appareils P2P rĂ©els chez des particuliers, 98,7 % d’IP propres, 195 pays. Ciblage par ville/ISP/code postal, sessions Ă  IP fixe ou rotative, trafic sans expiration. Essayez 350 MB pour $1.95. Code SCRAPEANDTAKE : 25 % de rĂ©duction.
LundProxy : Ne payez plus par GB. Trafic rĂ©sidentiel illimitĂ©, plus de 100 millions d’IP, plus de 190 pays. Payez selon la bande passante. Demandez un essai gratuit de proxies rĂ©sidentiels Ă  50 Mbps.
Resolvr : Le scraping Ă  grande Ă©chelle implique de nombreux CAPTCHAs. Resolvr rĂ©sout les dĂ©fis reCAPTCHA et Cloudflare sur de vrais appareils via une seule API. L’accĂšs gratuit Ă  la version bĂȘta est disponible dĂšs maintenant.
Des dĂ©fis hCaptcha lors de vos exĂ©cutions de Scrapling ? NoneCap renvoie des jetons hCaptcha valides via une seule API, y compris pour les clĂ©s de site Enterprise. 1 300 crĂ©dits gratuits Ă  l’inscription.
$1/GB chez DataImpulse. Proxies de premiĂšre main issus de sources Ă©thiques. Plus de 90 millions d’IP, plus de 195 pays. RĂ©sidentiels, de datacenter et mobiles. Paiement Ă  l’usage = sans abonnement. Le trafic n’expire jamais.

Vous souhaitez afficher votre publicitĂ© ici ? Cliquez ici

Sponsors


Vous souhaitez afficher votre publicitĂ© ici ? Cliquez ici et choisissez le niveau qui vous convient !


Fonctions principales

Spiders : un framework complet d’exploration de sites

  • đŸ•·ïž API de Spider proche de Scrapy : DĂ©finissez des spiders avec start_urls, des callbacks parse asynchrones et des objets Request et Response.
  • ⚡ Exploration simultanĂ©e : RĂ©glez le nombre de requĂȘtes simultanĂ©es, les limites par domaine et le dĂ©lai entre les tĂ©lĂ©chargements.
  • 🔄 Plusieurs sessions : Utilisez des requĂȘtes HTTP et des navigateurs furtifs sans interface graphique dans le mĂȘme spider. Dirigez les requĂȘtes vers diffĂ©rentes sessions grĂące Ă  leur ID.
  • đŸ’Ÿ Pause et reprise : Enregistrez les requĂȘtes en attente et les URL visitĂ©es avec crawldir. Appuyez sur Ctrl+C pour arrĂȘter proprement, puis relancez avec le mĂȘme dossier.
  • 📡 RĂ©sultats en streaming : Recevez les Ă©lĂ©ments dĂšs leur extraction avec async for item in spider.stream(), avec des statistiques en temps rĂ©el. Utile pour les interfaces, les traitements de donnĂ©es et les explorations longues.
  • đŸ›Ąïž DĂ©tection des requĂȘtes bloquĂ©es : DĂ©tectez et relancez les requĂȘtes bloquĂ©es automatiquement. Vous pouvez adapter ce comportement.
  • 🚩 AutoThrottle : Le spider ajuste le dĂ©lai de chaque domaine selon la vitesse de rĂ©ponse du site. Si le site bloque ou limite les requĂȘtes, il double le dĂ©lai ou respecte la durĂ©e indiquĂ©e par Retry-After. Il accĂ©lĂšre Ă  nouveau quand la limitation prend fin.
  • đŸ€– Respect de robots.txt : Activez robots_txt_obey pour respecter les directives Disallow, Crawl-delay et Request-rate, avec un cache par domaine.
  • đŸ§Ș Mode dĂ©veloppement : Enregistrez les rĂ©ponses sur disque lors de la premiĂšre exĂ©cution et rĂ©utilisez-les ensuite. Vous pouvez ainsi ajuster parse() sans envoyer de nouvelles requĂȘtes aux serveurs.
  • đŸ§© ModĂšles de spider prĂȘts Ă  l’emploi : Utilisez CrawlSpider pour suivre les liens selon des rĂšgles, SitemapSpider pour explorer Ă  partir de sitemaps ou de robots.txt, XMLFeedSpider et CSVFeedSpider pour lire des flux XML, RSS et CSV, et ShopifySpider pour collecter les produits des boutiques Shopify publiques, avec un Ă©lĂ©ment par variante.
  • 🔗 Extraction de liens : LinkExtractor permet d’accepter ou de refuser des liens selon des motifs, de filtrer les domaines et les extensions, de limiter la recherche avec CSS ou XPath et de normaliser les URL. Utilisez-le avec les modĂšles ou seul.
  • 📩 Export intĂ©grĂ© : Exportez les rĂ©sultats avec des hooks et votre propre traitement de donnĂ©es, ou utilisez les formats JSON, JSONL, CSV et XML intĂ©grĂ©s : result.items.to_json(), to_jsonl(), to_csv() et to_xml().

Récupération de pages avec des sessions

  • RequĂȘtes HTTP : Envoyez des requĂȘtes HTTP rapides et furtives avec Fetcher. Vous pouvez imiter l’empreinte TLS et les en-tĂȘtes d’un navigateur, et utiliser HTTP/3.
  • Chargement dynamique : RĂ©cupĂ©rez les sites dynamiques avec une automatisation complĂšte du navigateur grĂące Ă  StealthyFetcher, compatible avec le Chromium de Playwright et Google Chrome.
  • Contournement des systĂšmes antibot : StealthyFetcher masque l’automatisation et imite les empreintes du navigateur. Il peut franchir automatiquement les diffĂ©rents types de Cloudflare Turnstile et Interstitial.
  • Gestion des sessions : FetcherSession et StealthySession conservent les cookies et l’état entre les requĂȘtes.
  • Rotation des proxies : ProxyRotator permet une rotation cyclique ou personnalisĂ©e dans tous les types de sessions. Vous pouvez aussi choisir un proxy pour une requĂȘte prĂ©cise.
  • Blocage des domaines et des publicitĂ©s : Bloquez les requĂȘtes vers certains domaines et leurs sous-domaines, ou activez le blocage des publicitĂ©s des fetchers de navigateur. Il couvre environ 3 500 domaines connus de publicitĂ© et de suivi.
  • PrĂ©vention des fuites DNS : Activez DNS-over-HTTPS pour envoyer les requĂȘtes DNS par le service DoH de Cloudflare et Ă©viter les fuites lorsque vous utilisez des proxies.
  • Navigateurs distants : Connectez-vous par CDP Ă  un navigateur dĂ©jĂ  ouvert avec cdp_url, sur votre ordinateur, un autre serveur ou un service de navigateurs. Vous pouvez aussi utiliser votre propre version de Chromium avec tout fetcher de navigateur grĂące Ă  executable_path.
  • Capture des API en arriĂšre-plan : Activez record_requests=True dans une session de navigateur et cherchez les rĂ©ponses enregistrĂ©es avec session.network.search(limit=None). Lisez les donnĂ©es des API et les erreurs HTTP de plusieurs chargements sans rĂ©pĂ©ter les requĂȘtes. L’historique a une taille limitĂ©e et conserve le contenu des rĂ©ponses textuelles.
  • Mode asynchrone : Tous les fetchers peuvent fonctionner en mode asynchrone, avec des classes de session propres Ă  ce mode.

Analyse de pages et extraction de données

  • 🔄 Suivi des Ă©lĂ©ments : Retrouvez les Ă©lĂ©ments aprĂšs un changement du site grĂące Ă  des algorithmes de similaritĂ©.
  • 🎯 SĂ©lection souple : Utilisez CSS, XPath, les filtres, le texte, les expressions rĂ©guliĂšres et plus encore.
  • 🔍 ÉlĂ©ments similaires : Trouvez automatiquement des Ă©lĂ©ments proches de ceux que vous avez dĂ©jĂ  trouvĂ©s.

Fonctions pour l’IA

  • đŸ€– Serveur MCP : Permet aux assistants et agents IA, comme Claude et Cursor, d’extraire des donnĂ©es avec Scrapling par des requĂȘtes HTTP, des actions du navigateur, des captures d’écran, un Ă©tat de connexion enregistrĂ© et des rĂ©ponses d’API en arriĂšre-plan. Il utilise notre navigateur furtif et des outils qui aident les modĂšles adaptĂ©s Ă  rĂ©soudre les CAPTCHA, en plus du solveur Cloudflare. Il rĂ©duit le contenu envoyĂ© au modĂšle, bloque les publicitĂ©s et protĂšge contre les injections de prompts. Il permet aussi d’utiliser des navigateurs distants par CDP et des connexions HTTP avec des options d’authentification. (VidĂ©o de dĂ©monstration)
  • 🧠 Agent Skill : Une Agent Skill prĂȘte Ă  installer qui enseigne la bibliothĂšque aux agents de programmation pour qu’ils Ă©crivent du code conforme Ă  l’API actuelle.
  • 📚 Markdown prĂȘt pour le RAG : Convertissez une page en Markdown propre et adaptĂ© aux modĂšles de langage avec une ligne (page.markdown()), ou enregistrez un site entier en fichiers Markdown avec le modĂšle ContentSpider. Le processus ne demande aucun modĂšle de langage. (Documentation)

Performances et usage réel

  • 🚀 Grande vitesse : Des performances optimisĂ©es qui dĂ©passent la plupart des bibliothĂšques de web scraping pour Python.
  • 🔋 Faible usage de la mĂ©moire : Des structures de donnĂ©es optimisĂ©es et un chargement Ă  la demande.
  • ⚡ Conversion rapide en JSON : 10 fois plus rapide que la bibliothĂšque standard.
  • đŸ—ïž TestĂ© en pratique : Les tests couvrent 92 % de Scrapling et tout le code a des annotations de type. Des centaines de personnes l’ont utilisĂ© chaque jour pour extraire des donnĂ©es pendant l’annĂ©e passĂ©e.

Outils pour développer et extraire des données

  • 🎯 Shell interactif : Un shell IPython en option, intĂ©grĂ© Ă  Scrapling, avec des raccourcis et des outils pour crĂ©er des scripts plus vite. Convertissez les requĂȘtes curl en requĂȘtes Scrapling et consultez les rĂ©sultats dans votre navigateur.
  • 🚀 Usage depuis le terminal : Extrayez les donnĂ©es d’une URL sans Ă©crire de code.
  • đŸ› ïž Navigation dans le DOM : AccĂ©dez aux Ă©lĂ©ments parents, frĂšres et enfants.
  • 🧬 Traitement du texte : Expressions rĂ©guliĂšres, nettoyage du texte et opĂ©rations optimisĂ©es sur les chaĂźnes.
  • 📝 CrĂ©ation de sĂ©lecteurs : GĂ©nĂ©rez des sĂ©lecteurs CSS et XPath fiables pour tout Ă©lĂ©ment.
  • 🔌 API familiĂšre : Proche de Scrapy et BeautifulSoup, avec les mĂȘmes pseudo-Ă©lĂ©ments que Scrapy et Parsel.
  • đŸ€ IntĂ©gration directe avec Scrapy : Ajoutez le dĂ©corateur scrapling_response Ă  un callback pour analyser les rĂ©ponses que vous rĂ©cupĂ©rez dĂ©jĂ  avec le parser de Scrapling, sans réécrire votre programme.
  • 📘 Annotations de type complĂštes : Elles aident l’éditeur Ă  vĂ©rifier et Ă  complĂ©ter le code. Tout le code est vĂ©rifiĂ© automatiquement par PyRight et MyPy Ă  chaque changement.
  • 🔋 Image Docker prĂȘte Ă  l’emploi : Une image Docker avec tous les navigateurs est créée et publiĂ©e automatiquement Ă  chaque version.

Pour commencer

Voici quelques exemples de ce que vous pouvez faire avec Scrapling.

Utilisation de base

RequĂȘtes HTTP avec des sessions

from scrapling.fetchers import Fetcher, FetcherSession

with FetcherSession(impersonate='chrome') as session:  # Utiliser la derniĂšre version de l'empreinte TLS de Chrome
    page = session.get('https://quotes.toscrape.com/', stealthy_headers=True)
    quotes = page.css('.quote .text::text').getall()

# Ou utiliser des requĂȘtes ponctuelles
page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text').getall()

Mode furtif avancé

from scrapling.fetchers import StealthyFetcher, StealthySession

with StealthySession(headless=True, solve_cloudflare=True) as session:  # Garder le navigateur ouvert jusqu'à ce que vous ayez terminé
    page = session.fetch('https://nopecha.com/demo/cloudflare', google_search=False)
    data = page.css('#padded_content a').getall()

# Ou utiliser le style requĂȘte ponctuelle : ouvre le navigateur pour cette requĂȘte, puis le ferme aprĂšs
page = StealthyFetcher.fetch('https://nopecha.com/demo/cloudflare', solve_cloudflare=True)
data = page.css('#padded_content a').getall()

Automatisation complĂšte du navigateur

from scrapling.fetchers import StealthyFetcher, StealthySession

with StealthySession(headless=True, disable_resources=False, network_idle=True) as session:  # Garder le navigateur ouvert jusqu'à ce que vous ayez terminé
    page = session.fetch('https://quotes.toscrape.com/', load_dom=False)
    data = page.xpath('//span[@class="text"]/text()').getall()  # Sélecteur XPath si vous le préférez

# Ou utiliser le style requĂȘte ponctuelle : ouvre le navigateur pour cette requĂȘte, puis le ferme aprĂšs
page = StealthyFetcher.fetch('https://quotes.toscrape.com/')
data = page.css('.quote .text::text').getall()

Spiders

CrĂ©ez des crawlers complets avec des requĂȘtes simultanĂ©es, plusieurs types de sessions, la pause et la reprise :

from scrapling.spiders import Spider, Response

class QuotesSpider(Spider):
    name = "quotes"
    start_urls = ["https://quotes.toscrape.com/"]
    concurrent_requests = 10

    async def parse(self, response: Response):
        for quote in response.css('.quote'):
            yield {
                "text": quote.css('.text::text').get(),
                "author": quote.css('.author::text').get(),
            }

        next_page = response.css('.next a')
        if next_page:
            yield response.follow(next_page[0].attrib['href'])

result = QuotesSpider().start()
print(f"{len(result.items)} citations scrapées")
result.items.to_json("quotes.json")

Utilisez plusieurs types de sessions dans un seul spider :

from scrapling.spiders import Spider, Request, Response
from scrapling.fetchers import FetcherSession, AsyncStealthySession

class MultiSessionSpider(Spider):
    name = "multi"
    start_urls = ["https://example.com/"]

    def configure_sessions(self, manager):
        manager.add("fast", FetcherSession(impersonate="chrome"))
        manager.add("stealth", AsyncStealthySession(headless=True), lazy=True)

    async def parse(self, response: Response):
        for link in response.css('a::attr(href)').getall():
            # Router les pages protégées via la session furtive
            if "protected" in link:
                yield Request(link, sid="stealth")
            else:
                yield Request(link, sid="fast", callback=self.parse)  # Callback explicite

Enregistrez la progression pour mettre en pause et reprendre les explorations longues. Lancez le spider ainsi :

QuotesSpider(crawldir="./crawl_data").start()

Avec crawldir, Ctrl+C enregistre les requĂȘtes en attente et les URL visitĂ©es. Relancez avec le mĂȘme crawldir pour reprendre. Enregistrez les donnĂ©es extraites sĂ©parĂ©ment.

Vous pouvez aussi utiliser un modĂšle prĂȘt Ă  l’emploi. Par exemple, rĂ©cupĂ©rez tout le catalogue d’une boutique Shopify :

from scrapling.spiders import ShopifySpider

class MyStore(ShopifySpider):
    target_website = "example.com"

result = MyStore().start()  # Tous les produits de la boutique, un élément par variante

Le modÚle lit les produits disponibles sur les endpoints publics des collections, avec un élément par variante.

Analyse avancée et navigation

from scrapling.fetchers import Fetcher

# Sélection riche d'éléments et navigation
page = Fetcher.get('https://quotes.toscrape.com/')

# Obtenir des citations avec plusieurs méthodes de sélection
quotes = page.css('.quote')  # Sélecteur CSS
quotes = page.xpath('//div[@class="quote"]')  # XPath
quotes = page.find_all('div', {'class': 'quote'})  # Style BeautifulSoup
# Identique Ă 
quotes = page.find_all('div', class_='quote')
quotes = page.find_all(['div'], class_='quote')
quotes = page.find_all(class_='quote')  # et ainsi de suite...
# Trouver un élément par contenu textuel
quotes = page.find_by_text('Albert Einstein', first_match=False)

# Navigation avancée
quote_text = page.css('.quote')[0].css('.text::text').get()
quote_texts = page.css('.quote').css('.text::text').getall()  # Sélecteurs chaßnés
first_quote = page.css('.quote')[0]
author = first_quote.css('.author::text').get()
next_quote = first_quote.next
parent_container = first_quote.parent

# Relations et similarité entre éléments
similar_elements = first_quote.find_similar()
below_elements = first_quote.below_elements

Vous pouvez utiliser le parser directement, sans rĂ©cupĂ©rer de page web :

from scrapling.parser import Selector

page = Selector("<html>...</html>")

Il fonctionne de la mĂȘme façon.

Exemples de sessions asynchrones

import asyncio
from scrapling.fetchers import FetcherSession, AsyncStealthySession

async def main():
    async with FetcherSession(http3=True) as http_session:  # `FetcherSession` s'adapte au contexte et fonctionne en mode sync comme async
        page1 = await http_session.get('https://quotes.toscrape.com/')
        page2 = await http_session.get('https://quotes.toscrape.com/page/2/', impersonate='chrome')
        print(len(page1.css('.quote')), len(page2.css('.quote')))

    async with AsyncStealthySession(max_pages=2) as browser_session:
        urls = ['https://quotes.toscrape.com/js/', 'https://quotes.toscrape.com/js/page/2/']
        pages = await asyncio.gather(*(browser_session.fetch(url, wait_selector='.quote') for url in urls))
        print([len(page.css('.quote')) for page in pages])

asyncio.run(main())

CLI et shell interactif

Vous pouvez aussi utiliser Scrapling depuis le terminal :

asciicast

Lancez le shell interactif de web scraping :

pip install "scrapling[shell]"
scrapling shell

Extrayez des pages directement dans un fichier sans programmation. Utilisez --css-selector pour choisir le contenu ou --ai-targeted pour sélectionner et nettoyer le contenu de body. Utilisez .txt pour du texte, .md pour du Markdown ou .html pour du HTML.

scrapling extract get 'https://quotes.toscrape.com/' quotes.md
scrapling extract get 'https://quotes.toscrape.com/' quotes.txt --css-selector '.quote' --impersonate 'chrome'
scrapling extract fetch 'https://quotes.toscrape.com/js/' quotes.md --css-selector '.quote' --wait-selector '.quote' --no-headless
scrapling extract fetch 'https://nopecha.com/demo/cloudflare' captchas.html --css-selector '#padded_content a' --solve-cloudflare

[!NOTE] Consultez les autres fonctions, dont le serveur MCP et le shell interactif, dans la documentation complĂšte.

Tests de performance

Scrapling se distingue aussi par sa vitesse. Ces tests comparent son parser aux derniùres versions d’autres bibliothùques connues.

Vitesse d’extraction du texte (5 000 Ă©lĂ©ments imbriquĂ©s)

# BibliothĂšque Temps (ms) Par rapport Ă  Scrapling
1 Scrapling 1,99 1,0x
2 Parsel/Scrapy 2,06 1,035
3 Lxml seul 2,56 1,286
4 PyQuery 23,98 ~12x
5 Selectolax 197,02 ~99x
6 MechanicalSoup 1545,15 ~776,5x
7 BS4 avec Lxml 1562,1 ~785,0x
8 BS4 avec html5lib 3412,73 ~1714,9x

Recherche d’élĂ©ments similaires et de texte

La recherche adaptative d’élĂ©ments de Scrapling est plus rapide que les autres solutions :

BibliothĂšque Temps (ms) Par rapport Ă  Scrapling
Scrapling 2,3 1,0x
AutoScraper 12,58 5,47x

Chaque rĂ©sultat est la moyenne d’au moins 100 exĂ©cutions. Consultez benchmarks.py pour connaĂźtre la mĂ©thode.

Installation

Scrapling demande Python 3.10 ou une version plus rĂ©cente :

pip install scrapling

[!IMPORTANT] Cette commande installe seulement le parser et ses dĂ©pendances, sans fetchers ni outils en ligne de commande. Avec cette seule installation, importer depuis scrapling.fetchers ou scrapling.spiders, comme dans les exemples prĂ©cĂ©dents, provoque ModuleNotFoundError. Pour utiliser les fetchers ou les spiders, installez d’abord les dĂ©pendances des fetchers comme indiquĂ© ci-dessous.

Dépendances facultatives

  1. Pour utiliser les fetchers, leurs classes ou les fonctions supplĂ©mentaires suivantes, installez les dĂ©pendances des fetchers et des navigateurs :

    pip install "scrapling[fetchers]"
    
    scrapling install           # installation normale
    scrapling install  --force  # réinstallation forcée
    

    Cette commande télécharge tous les navigateurs, leurs dépendances systÚme et les outils de modification des empreintes du navigateur.

    Vous pouvez aussi les installer depuis Python, au lieu de lancer une commande :

    from scrapling.cli import install
    
    install([], standalone_mode=False)          # installation normale
    install(["--force"], standalone_mode=False) # réinstallation forcée
    
  2. Fonctions supplĂ©mentaires :

    • Installer le serveur MCP :
      pip install "scrapling[ai]"
      
    • Installer les dĂ©pendances pour crĂ©er des systĂšmes RAG :
      pip install "scrapling[rag]"
      
    • Installer le shell interactif et la commande extract :
      pip install "scrapling[shell]"
      
    • Tout installer :
      pip install "scrapling[all]"
      
      Lancez scrapling install pour utiliser les fetchers de navigateur. Les requĂȘtes HTTP ne demandent pas de navigateur.

Docker

Vous pouvez aussi tĂ©lĂ©charger depuis DockerHub une image Docker avec tous les extras et navigateurs :

docker pull pyd4vinci/scrapling

Ou la tĂ©lĂ©charger depuis le registre GitHub :

docker pull ghcr.io/d4vinci/scrapling:latest

L’image est créée Ă  partir de la branche principale du dĂ©pĂŽt et publiĂ©e automatiquement par GitHub Actions.

Contribuer

Les contributions sont les bienvenues ! Lisez nos consignes de contribution avant de commencer.

Avertissement

[!CAUTION] Cette bibliothĂšque est destinĂ©e Ă  l’enseignement et Ă  la recherche. En l’utilisant, vous acceptez de respecter les lois locales et internationales sur l’extraction de donnĂ©es et la vie privĂ©e. Les auteurs et contributeurs ne sont pas responsables d’un usage abusif de ce logiciel. Respectez les conditions d’utilisation des sites et les fichiers robots.txt.

🎓 Citations

Si vous avez utilisĂ© cette bibliothĂšque dans vos recherches, citez-la avec cette rĂ©fĂ©rence :

  @misc{scrapling,
    author = {Karim Shoair},
    title = {Scrapling},
    year = {2024},
    url = {https://github.com/D4Vinci/Scrapling},
    note = {A Python Web Scraping framework for everything from a single request to a full-scale crawl!}
  }

Licence

Ce projet utilise la licence BSD-3-Clause.

Remerciements

Ce projet inclut du code adaptĂ© de :

  • Parsel (Licence BSD) - UtilisĂ© pour le sous-module translator

Conçu et dĂ©veloppĂ© avec ❀ par Karim Shoair.

Explorer des projets similaires