---
title: "cloudscraper en Python Guide étape par étape"
slug: cloudscraper-guide
date: 2026-02-18T06:41:39+00:00
modified: 2026-04-27T09:04:57+00:00
permalink: https://brightdata.fr/blog/donnees-web/cloudscraper-guide
type: blog
---

[ Blog ](https://brightdata.fr/blog "Blog") / [Données Web](https://brightdata.fr/blog/donnees-web)







 [Données Web](https://brightdata.fr/blog/donnees-web)

# cloudscraper en Python Guide étape par étape

Apprenez à utiliser Cloudscraper dans Python pour contourner la protection de Cloudflare, gérer les erreurs et explorer des solutions alternatives pour les systèmes anti-bot.

 13 min de lecture





 [ ](https://brightdata.com/blog/authors/fortune-adekogbe)

 [Fortune Adekogbe

 ](https://brightdata.com/blog/authors/fortune-adekogbe)





 ![Cloudscraper in Python blog image](https://media.brightdata.fr/2024/09/Cloudscraper-in-Python.svg)





Dans ce tutoriel, vous apprendrez à utiliser la bibliothèque Python [cloudscraper](https://pypi.org/project/cloudscraper/) pour contourner la détection des bots de Cloudflare, gérer les erreurs courantes et explorer d’autres solutions de scraping pour bénéficier des protections anti-bots les plus robustes.

## <a></a>Comment utiliser cloudscraper dans Python

Dans ce tutoriel, vous allez essayer de scraper des données à partir d’un site web protégé par Cloudflare avec et sans cloudscraper. Pour ce faire, vous utiliserez les paquets Beautiful Soup et[Requests](/faqs/python-requests/what-is-python-requests). Si vous ne connaissez pas ces paquets, consultez[ce guide sur le Scraping web en Python](/blog/how-tos/web-scraping-with-python)pour en savoir plus.

Pour commencer, installez les paquets requis en exécutant la commande `pip` suivante :

```none
pip install tqdm==4.66.5 requests==2.32.3 beautifulsoup4==4.12.3

```

Pour faciliter la compréhension de ce tutoriel, le Scraper web suivant a été créé afin d’extraire les métadonnées des articles d’actualité publiés un jour donné sur le[site web ChannelsTV](https://www.channelstv.com/):

```none
import requests
from bs4 import BeautifulSoup
from datetime import datetime
from tqdm.auto import tqdm

def extract_article_data(article_source, headers):
    response = requests.get(article_source, headers=headers)
    if response.status_code != 200:
        return None

    soup = BeautifulSoup(response.content, 'html.parser')

    title = soup.find(class_="post-title display-3").text.strip()

    date = soup.find(class_="post-meta_time").text.strip()
    date_object = datetime.strptime(date, 'Updated %B %d, %Y').date()

    categories = [category.text.strip() for category in soup.find('nav', {"aria-label": "breadcrumb"}).find_all('li')]

    tags = [tag.text.strip() for tag in soup.find("div", class_="tags").find_all("a")]

    article_data = {
        'date': date_object,
        'title': title,
        'link': article_source,
        'tags': tags,
        'categories': categories
    }

    return article_data

def process_page(articles, headers):
    page_data = []
    for article in tqdm(articles):
        url = article.find('a', href=True).get('href')
        if "https://" not in url:
            continue
        article_data = extract_article_data(url, headers)
        if article_data:
            page_data.append(article_data)
    return page_data

def scrape_articles_per_day(base_url, headers):
    day_data = []
    page = 1

    while True:
        page_url = f"{base_url}/page/{page}"
        response = requests.get(page_url, headers=headers)

        if not response or response.status_code != 200:
            break

        soup = BeautifulSoup(response.content, 'html.parser')
        articles = soup.find_all('article')

        if not articles:
            break
        page_data = process_page(articles, headers)
        day_data.extend(page_data)

        page += 1

    return day_data

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
}

URL = "https://www.channelstv.com/2024/08/01/"

scraped_articles = scrape_articles_per_day(URL, headers)
print(f"{len(scraped_articles)} articles ont été récupérés.")
print("Exemples :")
print(scraped_articles[:2])

```

Dans ce code, trois fonctions sont définies pour faciliter le processus de scraping. La première, appelée `extract_article_data`, charge les données d’un article individuel et extrait les métadonnées, telles que sa date de publication, son titre, ses balises et ses catégories, dans un dictionnaire Python, qui est ensuite renvoyé. Les étapes de chargement et d’extraction sont mises en œuvre à l’aide des bibliothèques Python Requests et Beautiful Soup.

La deuxième fonction, `process_page`, obtient le lien vers tous les articles d’une page particulière et appelle la fonction `extract_article_data` pour extraire les données qu’ils contiennent et stocke chaque dictionnaire de métadonnées dans une liste, qui est ensuite renvoyée. La dernière fonction, nommée `scrape_articles_per_day`, utilise une boucle `while` pour incrémenter le numéro de page et extrait les données des articles de chaque page jusqu’à ce que vous arriviez à une page qui n’existe pas.

Ensuite, vous définissez l’URL à extraire et spécifiez la date à filtrer comme étant le 1er août 2024, ainsi qu’une variable `headers` contenant un exemple d’agent utilisateur. Vous appelez la fonction `scrape_articles_per_day` et transmettez les variables `URL` et `headers`. Ensuite, vous affichez le nombre d’articles extraits et les deux premiers résultats.

Idéalement, ce Scraper devrait fonctionner, mais ce n’est pas le cas, car le site web ChannelsTV utilise Cloudflare pour vous empêcher d’accéder au contenu de ses pages web via les requêtes directes mises en œuvre dans les fonctions`extract_article_data`et`scrape_articles_per_day`.

Lorsque vous essayez d’exécuter ce script, le résultat ressemble à ceci :

```none
0 article a été récupéré.
Exemples :
[]

```

### <a></a>Intégrer cloudscraper

Auparavant, lorsque vous vouliez extraire des métadonnées spécifiques d’un article, rien n’était renvoyé, grâce à la protection de Cloudflare. Dans cette section, vous allez installer et utiliser cloudscraper pour contourner ce problème.

Pour commencer, installez la bibliothèque cloudscraper en exécutant la commande `pip` suivante :

```none
pip install cloudscraper==1.2.71

```

Ensuite, importez le paquet et définissez une fonction `fetch_html_content` comme suit :

```none
import cloudscraper

def fetch_html_content(url, headers):
    try:
        scraper = cloudscraper.create_scraper()
        response = scraper.get(url, headers=headers)

        if response.status_code == 200:
            return response
        else:
            print(f"Échec de la récupération de l'URL : {url}. Code d'état : {response.status_code}")
            return None
    except Exception as e:
        print(f"Une erreur s'est produite lors de la récupération de l'URL : {url}. Erreur : {str(e)}")
        return None

```

Cette fonction prend en paramètres d’entrée l’URL à scraper et les en-têtes de requête, et renvoie soit un objet de réponse, soit `None`. Dans la fonction, vous définissez un bloc `try-except`. Dans le bloc `try`, vous créez un Scraper à l’aide de la méthode `cloudscraper.create_scraper`. Ensuite, vous appelez la méthode `scraper.get` et transmettez les variables `url` et `headers`. Si le code d’état de votre réponse est `200`, vous renvoyez la réponse. Sinon, vous affichez un message d’erreur et renvoyez `None`. De même, si une erreur se produit dans le bloc `try`, le bloc `except` est déclenché, dans lequel un message approprié est affiché et `None` est renvoyé.

Ensuite, vous remplacez chaque appel `requests.get` dans votre script par cette fonction `fetch_html_content`. Commencez par effectuer ce remplacement dans votre fonction `extract_article_data` comme suit :

```none
def extract_article_data(article_source, headers):
    response = fetch_html_content(article_source, headers)

```

Ensuite, remplacez l’appel `requests.get` dans votre fonction `scrape_articles_per_day` comme suit :

```none
def scrape_articles_per_day(base_url, headers):
    day_data = []
    page = 1

    while True:
        page_url = f"{base_url}/page/{page}"
        response = fetch_html_content(page_url, headers)

```

En définissant cette fonction, la bibliothèque cloudscraper peut vous aider à contourner les restrictions de Cloudflare.

Lorsque vous exécutez le code, le résultat ressemble à ceci :

```none
Échec de la récupération de l'URL : https://www.channelstv.com/2024/08/01//page/5. Code d'état : 404
55 articles ont été récupérés.
Exemples :
[{'date': datetime.date(2024, 8, 1),
  'title': 'Résilience, gaz lacrymogène, pillages, couvre-feu alors que les manifestations #EndBadGovernance se poursuivent',
  'link': 'https://www.channelstv.com/2024/08/01/tear-gas-resilience-looting-curfew-as-endbadgovernance-protests-hold/',
  'tags': ['Eagle Square', 'Hunger', 'Looting', 'MKO Abiola Park', 'violence'],
  'categories': ['Headlines']},
 {'date': datetime.date(2024, 8, 1),
  'title': 'La mère d'un artiste russe libéré dans le cadre d'un échange de prisonniers attend de pouvoir le « serrer dans ses bras »,
  'link': 'https://www.channelstv.com/2024/08/01/mother-of-russian-artist-freed-in-prisoner-swap-waiting-to-hug-her/',
  'tags': ['Prisoner Swap', 'Russia'],
  'categories': ['World News']}]

```

## <a></a>Fonctionnalités supplémentaires de Cloudscraper

Comme vous pouvez le constater, Cloudscraper peut vous aider à contourner la protection IUAM de Cloudflare, mais il offre également d’autres fonctionnalités qui méritent d’être soulignées.

### <a></a>Utilisation de proxies

Les Proxys servent de serveurs intermédiaires entre votre ordinateur et les sites cibles, vous permettant ainsi de naviguer sur Internet de manière plus anonyme. Vos requêtes sont acheminées via ces Proxys afin que les sites web cibles, tels que les sites protégés par Cloudflare, voient le serveur Proxy comme la source du Trafic et non votre appareil.

Avec Cloudscraper, vous pouvez définir des Proxys et les transmettre à votre objet `Cloudscraper` déjà créé comme suit :

```none
Scraper = cloudscraper.create_scraper()

Proxy = {
    'http': 'http://your-proxy-ip:port',
    'https': 'https://your-proxy-ip:port'
}

response = scraper.get(URL, proxies=Proxy)

```

Ici, vous définissez un objet Scraper avec des valeurs par défaut. Ensuite, vous définissez un dictionnaire Proxy avec des proxys `http` et `https`. Enfin, vous transmettez l’objet dictionnaire Proxy à la méthode `scraper.get` comme vous le feriez avec une méthode `request.get` classique.

### <a></a>Modification de l’agent utilisateur et de l’interpréteur JavaScript

Alors que vous avez spécifié directement un agent utilisateur dans le script précédent, la bibliothèque cloudscraper peut également générer automatiquement des agents utilisateurs. Cela réduit les configurations manuelles nécessaires lors de la création de scripts et vous permet d’imiter de vrais utilisateurs avec différentes identités de navigateur. Cette opération est effectuée de manière aléatoire, mais vous pouvez également sélectionner le type d’agents utilisateurs à partir desquels elle effectue l’échantillonnage en transmettant un paramètre de navigateur à la méthode `cloudscraper.create_scraper`. Ce paramètre de navigateur contient un dictionnaire qui stocke des valeurs de chaîne pour le navigateur et la plate-forme, ainsi que des valeurs booléennes pour les ordinateurs de bureau et les appareils mobiles.

cloudscraper vous permet également de spécifier l’interpréteur JavaScript et le moteur que vous utilisez avec votre Scraper. La valeur par défaut est un solveur natif créé par l’équipe cloudscraper. Les autres options disponibles sont Node.js, Js2Py, ChakraCore et v8eval.

Voici un exemple de snippet montrant les spécifications d’un interpréteur et d’un navigateur :

```none
Scraper = cloudscraper.create_scraper(
    interpreter="nodejs",
    browser={
        "browser": "chrome",
        "platform": "ios",
        "desktop": False,
    }
)

```

Ici, vous définissez l’interpréteur comme ` « nodejs »` et transmettez un dictionnaire au paramètre du navigateur. Dans ce dictionnaire, le navigateur est défini sur Chrome et la plateforme sur ` « ios ».` Le paramètre desktop est défini sur `False`, ce qui signifie que le navigateur fonctionne sur mobile, car les valeurs mobile et desktop sont définies sur `True` par défaut. Dans ce cas, Cloudflare sélectionne les agents utilisateurs iOS mobiles fonctionnant sur le navigateur Chrome.

### <a></a>Gestion des CAPTCHA

[Les CAPTCHA](/blog/web-data/what-is-a-captcha)sont conçus pour distinguer les humains des robots, et ils peuvent souvent empêcher le chargement de la page Web cible lorsque vous effectuez du Scraping web. L’un des avantages de Cloudscraper est qu’il prend en charge certains solveurs de CAPTCHA tiers, dédiés à [reCAPTCHA](/products/web-unlocker/captcha-solver/recaptcha), [hCaptcha](/products/web-unlocker/captcha-solver/hcaptcha), [etc.](/products/web-unlocker/captcha-solver) Si vous connaissez d’autres solveurs CAPTCHA tiers qui vous intéressent, vous pouvez faire part de vos suggestions à l’équipe Cloudscraper via les tickets d’assistance GitHub.

L’extrait de code suivant vous montre comment modifier votre Scraper pour gérer les CAPTCHA :

```none
Scraper = cloudscraper.create_scraper(
  captcha={
    'provider': 'capsolver',
    'api_key': 'your_capsolver_api_key'
  }
)

```

Dans ce code, vous spécifiez votre fournisseur CAPTCHA comme Capsolver et votre clé API Capsolver. Les deux valeurs sont stockées dans un dictionnaire et transmises au paramètre CAPTCHA dans la méthode `cloudscraper.create_scraper`.

## <a></a>Erreurs courantes de cloudscraper

Bien que cloudscraper soit un moyen facile de contourner les restrictions de Cloudflare, vous pouvez rencontrer quelques erreurs lorsque vous commencez à l’utiliser. Voici quelques-unes des erreurs les plus courantes (et leurs solutions) que vous pouvez rencontrer.

### <a></a>Module introuvable

L’erreur « `module introuvable` » est une erreur courante en Python qui se produit lorsque vous essayez d’importer ou d’utiliser une bibliothèque qui n’existe pas dans votre environnement Python.

Lorsque vous travaillez en Python, vous opérez dans un environnement, et seules les bibliothèques installées dans cet environnement actif sont accessibles par votre script ou votre notebook. L’erreur « `module introuvable` » signifie que vous n’avez pas activé l’environnement (virtuel) concerné ou que vous n’avez pas installé le paquet dans votre environnement.

Pour activer votre environnement virtuel sous Windows, exécutez la commande suivante :

```none
.<venv-name>Scriptsactivate.bat

```

Si vous travaillez sous Linux ou macOS, vous pouvez utiliser la commande suivante :

```none
source <venv-name>/bin/activate

```

Si le paquet n’est pas installé, installez-le en exécutant la commande suivante :

```none
pip install cloudscraper

```

### <a></a>cloudscraper ne peut pas contourner la dernière version de Cloudflare

L’erreur « `cloudscraper ne peut pas contourner la dernière version de Cloudflare` » se produit lorsque vous essayez d’utiliser une version de cloudscraper conçue pour contourner une ancienne version de Cloudflare. Cela pose problème, car les versions plus récentes de Cloudflare peuvent comporter des modifications qui limitent les anciennes versions de cloudscraper jusqu’à ce que la bibliothèque Python soit mise à jour.

Si vous utilisez une ancienne version de cloudscraper, il est préférable de mettre à jour votre package à l’aide de la commande suivante :

```none
pip install -U cloudscraper

```

Si vous utilisez déjà la version la plus récente de cloudscraper, vous devrez peut-être attendre une mise à jour ou trouver une autre solution qui fonctionne.

## <a></a>Une alternative à cloudscraper

Si, après avoir mis en œuvre ce que vous avez appris ici, vous rencontrez toujours des difficultés pour contourner la protection de Cloudflare, vous devriez envisager d’utiliser Bright Data.

Bright Data dispose de l’un des plus grands réseaux de proxys, comprenant [des proxys](/proxy-types/residential-proxies)[de centres de données](/proxy-types/datacenter-proxies), [de FAI](/proxy-types/isp-proxies), [mobiles](/proxy-types) et [résidentiels](/proxy-types/residential-proxies). Grâce à ces proxys qui servent d’intermédiaires, vous pouvez éviter le blocage des adresses IP, améliorer les performances, contourner les restrictions géographiques et protéger votre vie privée.

Pour contourner la protection Cloudflare à l’aide de Bright Data, il vous suffit de créer un compte, de le configurer et d’obtenir vos identifiants API. Vous pouvez ensuite utiliser ces identifiants pour accéder aux données de l’URL cible comme suit :

```none
import requests

host = 'brd.superproxy.io'
port = 22225

username = 'brd-customer-<CUSTOMER_ID>-zone-<ZONE_NAME>'
password = '<ZONE_PASSWORD>'

proxy_url = f'http://{username}:{password}@{host}:{port}'

proxies = {
    'http': proxy_url,
    'https': proxy_url
}

response = requests.get(URL, proxies=proxies)

```

Ici, vous effectuez une requête `GET` avec la bibliothèque Python Requests et transmettez les Proxy via le paramètre `proxies`. Les Proxy créés utilisent votre nom d’utilisateur, votre mot de passe, votre hôte et votre numéro de port Bright Data. Votre nom d’utilisateur, en particulier, est défini en fonction de votre identifiant client Bright Data et du nom de votre Zone, qui peuvent tous être récupérés à partir de votre compte.

## <a></a>Conclusion

Dans ce tutoriel, vous avez appris à utiliser la bibliothèque cloudscraper en Python pour scraper des sites web protégés par Cloudflare. Vous avez également découvert certaines erreurs courantes que vous pourriez rencontrer et comment les contourner. Bien que cloudscraper puisse être une excellente solution pour contourner l’IUAM de Cloudflare, comme toute technologie gratuite, elle a ses limites. C’est pourquoi vous avez également appris à utiliser l’impressionnant réseau de Proxys[Bright Data](/)et[Web Unlocker](/products/web-unlocker)pour accéder aux sites protégés par Cloudflare.

Bright Data vous fournit des outils automatisés qui vous permettent d’accéder aux données sur Internet sans aucune restriction. Vous pouvez également utiliser son vaste réseau de Proxys pour réduire le nombre de requêtes échouées si l’automatisation n’est pas votre objectif.

Prêt à passer au niveau supérieur en matière de Scraping web ? Découvrez comment nos Proxys premium et nos services experts de collecte de données web peuvent facilement contourner même les protections anti-bots les plus strictes. Commencez dès aujourd’hui avec un essai gratuit !



Contacter ventesEssai gratuit![google social icon](/wp-content/themes/brightdata/assets/images/ic_google.svg)









 Table des matières







Dedicated Scraper APIs &amp; No-Code Scrapers

Over 1000 scrapers for all popular domains. Simplify your web scraping.

[See pricing](/pricing/web-scraper "See pricing")

Just want data? Skip scraping.

Hundreds of ready-to-use datasets from all popular domains.

[See pricing](/pricing/datasets "See pricing")







 [ ](https://news.ycombinator.com/submitlink?t=cloudscraper+en+Python+Guide+%C3%A9tape+par+%C3%A9tape&u=https://brightdata.fr/blog/donnees-web/cloudscraper-guide) [ ](https://www.linkedin.com/shareArticle?mini=true&title=cloudscraper+en+Python+Guide+%C3%A9tape+par+%C3%A9tape&url=https://brightdata.fr/blog/donnees-web/cloudscraper-guide) [ ](http://www.reddit.com/submit?title=cloudscraper+en+Python+Guide+%C3%A9tape+par+%C3%A9tape&url=https://brightdata.fr/blog/donnees-web/cloudscraper-guide)







##  Vous pourriez aussi être intéressé par

 [ ![OpenHuman with Bright Data](https://media.brightdata.fr/2026/09/OpenHuman-with-Bright-Data.png) ](https://brightdata.fr/blog/ai/openhuman-with-bright-data "Accès Web Prêt pour la Production dans OpenHuman via le CLI Bright Data")

 [AI



 ![Antonello Zanini](https://media.brightdata.fr/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Accès Web Prêt pour la Production dans OpenHuman via le CLI Bright Data

Intégrez le CLI Bright Data avec OpenHuman pour permettre un accès web prêt pour la production et la collecte de données pour les agents IA.



 09-Sep-2026

 14 min de lecture

 ](https://brightdata.fr/blog/ai/openhuman-with-bright-data)

 [ ![Multimodal Web Scraping with MiniMax](https://media.brightdata.fr/2026/09/Multimodal-Web-Scraping-with-MiniMax.png) ](https://brightdata.fr/blog/donnees-web/multimodal-web-scraping-with-minimax "Scraping Web Multimodal avec MiniMax")

 [Données Web



 ![Antonello Zanini](https://media.brightdata.fr/2022/12/Antonello-Zanini-2-50x50.jpg)

Antonello Zanini

Technical Writer





### Scraping Web Multimodal avec MiniMax

Associez Bright Data Web Unlocker avec la vision MiniMax M3 pour extraire des données structurées à partir d’images et de captures d’écran de pages web.



 09-Sep-2026

 5 min de lecture

 ](https://brightdata.fr/blog/donnees-web/multimodal-web-scraping-with-minimax)

 [ ![The 10 Best CLI Tools for Codex in 2026](https://media.brightdata.fr/2026/08/The-10-Best-CLI-Tools-for-Codex-in-2026.png) ](https://brightdata.fr/blog/ai/best-cli-tools-for-codex "Les 10 meilleurs outils CLI pour Codex en 2026 – Testés & Classés")

 [AI



 ![Daniel Shashko](https://media.brightdata.fr/2022/04/Daniel-Shashko-2-50x50.png)

Daniel Shashko

Web Data &amp; AI Expert





### Les 10 meilleurs outils CLI pour Codex en 2026 – Testés &amp; Classés

Les 10 outils CLI qui rendent Codex plus rapide et plus capable, en commençant par le Bright Data CLI pour un accès web réel depuis l’intérieur du sandbox.



 06-Sep-2026

 24 min de lecture

 ](https://brightdata.fr/blog/ai/best-cli-tools-for-codex)
