Comment utiliser CURL avec Python pour le Web Scraping
Mihnea-Octavian Manolache le 30 novembre 2022
L'action la plus élémentaire que doit effectuer toute application de web scraping est de collecter le fichier HTML, puis de le manipuler. Bien sûr, il existe différentes façons d'y parvenir. Cependant, dans l'article d'aujourd'hui, nous allons découvrir comment utiliser CURL avec Python pour un scraper web. Voici un aperçu d'une fraction des choses que vous apprendrez après avoir lu cet article :
- Qu'est-ce que cURL et comment y accéder à partir de la ligne de commande ?
- Comment utiliser la commande cURL pour recueillir des informations sur n'importe quel site web ?
- Comment utiliser cURL en Python pour construire un simple scraper web
Comment utiliser CURL avec Python ?
En bref, cURL est principalement un outil de ligne de commande utilisé pour récupérer des données sur un serveur. Je sais qu'en évoquant la ligne de commande, les choses peuvent sembler compliquées. Cependant, je peux vous assurer qu'en pratique, comme vous le découvrirez tout au long de cet article, cURL est peut-être l'un des outils les plus simples que vous aurez à utiliser en tant que programmeur.
Pour utiliser cURL à partir de la ligne de commande, ouvrez simplement une nouvelle fenêtre de terminal et tapez `curl` suivi de l'URL que vous voulez récupérer. Par exemple :
~ " curl 'https://api.ipify.org?format=json'
Cette simple commande permet d'accéder à l'API d'ipify et de demander des informations au serveur, comme le ferait un navigateur traditionnel. Le résultat de cet exemple sera un objet JSON contenant votre adresse IP. Même si cela n'en a pas l'air, vous venez de construire l'infrastructure d'un futur web scraper. Le tout en une seule ligne de code.
cURL est en fait un outil plus avancé. Si vous voulez en savoir plus sur l'utilisation de curl, vous pouvez consulter la documentation officielle. Vous pouvez également utiliser le commutateur `--help` et lire les différentes options disponibles.
Comment utiliser cURL pour récupérer des fichiers HTML
Dans l'exemple ci-dessus, la réponse que nous avons reçue du serveur ipify était un fichier JSON. Cela s'explique par le fait que ce point d'accès à l'API renvoie des données au format JSON. En ce qui concerne le web scraping, vous rencontrerez généralement des sites web traditionnels qui fournissent des fichiers HTML, que vous devrez ensuite analyser et dont vous devrez extraire les données.
Cependant, pour l'instant, nous ne nous concentrons pas sur la manipulation des données, mais plutôt sur leur extraction. Nous savons que nous pouvons utiliser cURL pour gratter des sites web, mais comment faire ? Eh bien, si vous n'avez pas déjà été curieux et n'avez pas essayé, demandez simplement à curl d'accéder à n'importe quelle URL générique que vous savez être un site web traditionnel basé sur HTML. Prenons l'exemple de httpbin.org :
curl 'https://httpbin.org/forms/post'
Tapez cette commande dans votre terminal et vous recevrez une réponse en HTML simple :
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<!-- Example form from HTML5 spec http://www.w3.org/TR/html5/forms.html#writing-a-form's-user-interface -->
<form method="post" action="/post">
<p><label>Customer name: <input name="custname"></label></p>
<p><label>Telephone: <input type=tel name="custtel"></label></p>
<p><label>E-mail address: <input type=email name="custemail"></label></p>
<fieldset>
<legend> Pizza Size </legend>
<p><label> <input type=radio name=size value="small"> Small </label></p>
<p><label> <input type=radio name=size value="medium"> Medium </label></p>
<p><label> <input type=radio name=size value="large"> Large </label></p>
</fieldset>
<fieldset>
<legend> Pizza Toppings </legend>
<p><label> <input type=checkbox name="topping" value="bacon"> Bacon </label></p>
<p><label> <input type=checkbox name="topping" value="cheese"> Extra Cheese </label></p>
<p><label> <input type=checkbox name="topping" value="onion"> Onion </label></p>
<p><label> <input type=checkbox name="topping" value="mushroom"> Mushroom </label></p>
</fieldset>
<p><label>Preferred delivery time: <input type=time min="11:00" max="21:00" step="900" name="delivery"></label></p>
<p><label>Delivery instructions: <textarea name="comments"></textarea></label></p>
<p><button>Submit order</button></p>
</form>
</body>
</html>
Comment utiliser cURL en Python
Comme vous l'avez vu, l'extraction de données avec cURL est une solution simple qui ne nécessite aucun codage. Il s'agit simplement d'envoyer une commande et de recevoir des informations. Si vous souhaitez mettre en place un véritable projet de web scraping, vous devrez d'une manière ou d'une autre utiliser les données que vous avez collectées. Et comme nous sommes des programmeurs, nous voulons manipuler les données de manière programmatique. C'est là que Python entre en jeu.
Pourquoi choisir Python pour un projet de Web Scraping ?
Python est sans aucun doute l'un des langages de programmation les plus populaires. Non seulement il est très puissant, mais sa syntaxe simple le rend parfait pour les programmeurs débutants. Il dispose également d'une grande communauté qui est toujours prête à intervenir et à aider. Si vous rencontrez un problème et que vous êtes bloqué, n'hésitez pas à poser une question sur Stackoverflow, par exemple, et quelqu'un vous aidera certainement.
En ce qui concerne le web scraping en particulier, Python est un excellent choix en raison de tous les paquets qu'il contient. Comme vous le verrez plus loin dans cet article, la manipulation des données nécessite l'analyse des fichiers HTML, de sorte que vous puissiez ensuite "exploiter" les éléments et extraire uniquement les informations que vous ciblez à partir de cette page web particulière.
Récupération de données sur le Web avec cURL et Python
Jusqu'à présent, nous avons découvert curl et comment l'utiliser dans le terminal, mais comment l'intégrer à Python ? En fait, il y a plusieurs façons d'aborder cette question. Par exemple, vous pouvez utiliser le module `os` de Python et envoyer des commandes de terminal :
import os
curl = os.system(f'curl "https://httpbin.org/forms/post"')
print(curl)
Vous pouvez également créer votre propre fonction autour de celle-ci et l'utiliser tout au long du projet :
import os
def curl(website):
return os.system(f'curl "{website}"')
print(curl('https://httpbin.org/forms/post'))
Cependant, comme je l'ai dit, l'une des plus grandes forces de Python est sa diversité de paquets. Comme cURL est beaucoup plus diversifié, notre fonction devrait être beaucoup plus complexe afin de prendre en compte toutes ses fonctionnalités. Ainsi, au lieu de réinventer la roue, je recommande d'utiliser un paquetage existant pour l'intégration de cURL dans Python : PycURL.
Qu'est-ce que PycURL et comment l'installer ?
Selon leur site web, PycURL est une interface de la bibliothèque cURL, héritant ainsi de toutes les capacités de libcURL. En bref, PycURL est le moyen par lequel nous utiliserons cURL dans Python. Pour l'installer, comme pour tout autre paquetage Python, nous utiliserons pip. Si vous ne connaissez pas pip, il s'agit d'un système de gestion de paquets pour Python et les développeurs Python l'utilisent tout le temps pour installer rapidement des dépendances.
Ceci étant dit, pour installer PycURL, ajoutez simplement la commande suivante dans votre terminal :
~ " pip install pycurl
Analyse du code HTML à l'aide de BeautifulSoup
Puisque nous parlons de dépendances et de pip, il convient également de mentionner que la communauté Python a proposé un certain nombre de solutions pour l'analyse HTML. L'un des packages d'analyse HTML les plus populaires est BeautifulSoup. Chez WebScrapingAPI, nous avons d'ailleurs consacré un article de blog entier à l'extraction et à l'analyse de données web avec Python et BeautifulSoup.
Tout comme pour PycURL, l'installation de BeautifulSoup ne nécessite qu'une seule commande :
~ " pip install beautifulsoup4
Comment construire un scraper web avec Python et cURL
Maintenant que nous avons couvert la partie théorique et que nous savons comment utiliser cURL à la fois avec le terminal et en Python, passons directement au codage. Dans cette section, nous allons apprendre à utiliser curl en Python en construisant un véritable scraper web. Alors, sans plus attendre, que le jeu du codage commence !
1. Mise en place de l'annuaire
En tant qu'ingénieur logiciel, il est important de structurer nos projets de manière à ce qu'ils soient faciles à maintenir et à lire par nous-mêmes et par les autres développeurs. Pour que tout soit bien organisé, commençons par créer un nouveau répertoire qui contiendra tous les fichiers de notre projet. Ouvrez une nouvelle fenêtre de terminal, `cd` dans Desktop et créez un nouveau dossier nommé `py_scraper` :
~ " cd desktop && mkdir py_scraper && cd py_scraper
Permettez-moi d'expliquer brièvement les commandes que nous avons utilisées jusqu'à présent :
- `cd` - changer le répertoire courant
- `&&` - exécuter la commande suivante seulement si la précédente a réussi
- `mkdir` - crée un nouveau répertoire
Ouvrez votre projet dans votre IDE favori et créez un nouveau fichier nommé 'scraper.py' dans le répertoire `py_scraper`. Astuce: Vous pouvez également le faire à partir de la ligne de commande en utilisant cette commande :
~/desktop/py_scraper " touch scraper.py && code .
Si vous utilisez le VSCode (comme moi), vous verrez apparaître une fenêtre qui devrait ressembler à celle-ci :

2. Installation des paquets
Votre terminal devrait maintenant se trouver dans le répertoire `py_scraper`. La dernière chose à faire avant de coder le scraper proprement dit est d'installer les paquets que nous avons présentés précédemment ainsi qu'un autre. Cependant, nous voulons les contenir uniquement dans le répertoire `py_scraper` (et ne pas les installer globalement). Pour ce faire, nous devrons utiliser les environnements virtuels de Python. Ceux-ci nous permettent d'isoler l'interpréteur Python, les bibliothèques et les scripts installés.
Pour mettre en place un nouvel environnement virtuel dans le répertoire `py_scraper`, utilisez la commande suivante :
~/desktop/py_scraper " python3 -m venv env
Cela créera un nouveau dossier `env` que nous devons activer avant d'installer les paquets désirés. Activez-le en utilisant cette commande :
~/desktop/py_scraper " source env/bin/activate
Maintenant que vous avez créé et activé votre environnement virtuel, il ne vous reste plus qu'à installer les paquets nécessaires en utilisant les commandes pip que nous avons présentées précédemment.
~/desktop/py_scraper " pip install pycurl beautifulsoup4 certify
3. Création d'un scraper Web Python et cURL
Vous êtes maintenant prêt à utiliser PycURL et BeautifulSoup. Afin d'utiliser ces paquets, nous devons d'abord les importer dans notre fichier `scraper.py`. Ajoutez simplement cet extrait au début du fichier :
import pycurl
import certify
from io import BytesIO
from bs4 import BeautifulSoup
# Toute notre logique ira sous cette ligne
Maintenant que vous avez importé les paquets, nous allons nous occuper de la logique de notre scraper web. D'après ce que nous avons discuté jusqu'à présent, nous savons que nous devons couvrir deux aspects : l'extraction et la manipulation des données. La première section est couverte par PycURL et la seconde par BeautifulSoup. Pour une meilleure structure, je suggère que nous traitions chaque section séparément.
3.1. Récupérer des données avec cURL et Python
Lorsque je parle de scraping, je me réfère à la partie extraction du web scraper. Ayant cela à l'esprit et sachant comment utiliser curl en Python en interagissant avec l'interface PycURL, écrivons le code :
# Définition de variables globales
TARGET_URL = 'https://httpbin.org/forms/post'
# Utilisation de cURL et de Python pour collecter des données à partir d'un serveur via PycURL
buffer = BytesIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, TARGET_URL)
curl.setopt(curl.WRITEDATA, buffer)
curl.setopt(curl.CAINFO, certifi.where())
curl.perform()
curl.close()
# Utilisation de BytesIO pour récupérer les données scrappées
body = buffer.getvalue()
# Sauvegarde de la sortie et impression dans le terminal
data = body.decode('iso-8859-1')
print(data)
Dans le code ci-dessus, nous commençons par déclarer la variable globale `TARGET_URL` qui contient l'URL du site web dont nous voulons extraire les données. Ensuite, nous créons un tampon en utilisant `BufferIO`, nous initialisons PycURL et définissons deux options : une pour le transfert de données, l'autre pour le nom du fichier contenant les certificats. Enfin, nous exécutons l'action curl et fermons la session par la suite.
Voilà, vous avez réussi à utiliser Python pour faire une requête cURL et à imprimer le fichier HTML dans votre console. Il ne nous reste plus qu'à nous occuper de la deuxième section, à savoir la gestion des données.
3.2. Analyse du HTML avec Python et BeautifulSoup
Having the raw data is redundant in web scraping, unless we perform some sort of action on it. As the most basic scope of any web scraper is to extract data from HTML. For our example, let us assume that we want to scrape all text inside the `<p>` elements from the `data` variable (that is currently holding all the scraped HTML). Here is how we do this using BeautifulSoup:
# Analyse des données à l'aide de BeautifoulSoup
soup = BeautifulSoup(data, 'html.parser')
# Recherche d'éléments à l'aide de BeautifoulSoup
paragraphs = soup.find_all("p")
for p in paragraphs :
print(p.text)
Comme vous pouvez le voir, avec BeautifulSoup, il ne faut que 4 lignes de code pour obtenir le résultat souhaité. L'exécution du script complet devrait maintenant imprimer le texte à l'intérieur de chaque paragraphe trouvé dans le fichier HTML que nous avons collecté à partir de notre site web ciblé.
Donc, en supposant que vous avez suivi les instructions et que votre `scraper.py` inclut tout le code que nous avons écrit dans cette section, retournons au terminal et lançons le script :
~/desktop/py_scraper " python3 scraper.py
Nom du client :
Téléphone :
Adresse électronique :
Petit
Moyen
Grand
Bacon
Extra fromage
Oignon
Champignon
Délai de livraison souhaité :
Instructions de livraison :
Soumettre la commande
Conclusion
Construire un scraper web avec Python et cURL est un projet très utile et peut être le point de départ d'une application de web scraping plus importante. L'approche recommandée pour intégrer les deux technologies est d'utiliser PycURL. Vous pouvez également écrire votre propre interface ou fonction pour interagir avec cURL en Python. Cela demande juste un peu plus de temps et d'efforts :).
J'espère que cet article a été une bonne ressource pour apprendre curl, comment l'utiliser avec Python, et construire un scraper web basique. De plus, je vous invite à modifier le code et à vous l'approprier, ce qui vous permettra d'ajouter un nouveau projet à votre portfolio.
Nouvelles et mises à jour
Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

Scrapez Amazon efficacement grâce à la solution rentable de Web Scraping API. Accédez à des données en temps réel, des produits aux profils des vendeurs. Inscrivez-vous dès maintenant !


Explorez les complexités du scraping des données de produits Amazon avec notre guide approfondi. Des meilleures pratiques aux outils tels que l'API Amazon Scraper, en passant par les considérations juridiques, apprenez à relever les défis, à contourner les CAPTCHA et à extraire efficacement des informations précieuses.


Explorez la comparaison approfondie entre Scrapy et Selenium pour le web scraping. De l'acquisition de données à grande échelle à la gestion de contenus dynamiques, découvrez les avantages, les inconvénients et les caractéristiques uniques de chacun. Apprenez à choisir le meilleur framework en fonction des besoins et de l'échelle de votre projet.
