In this Article
Que vous travailliez sur une idée personnelle ou un projet d’entreprise, les données sont essentielles. Lorsque vous lancez un nouveau projet ou élaborez la stratégie d’une entreprise existante, vous devez analyser un volume important de données. Cette analyse vous aide à définir des solutions adaptées au jeu de données et au problème à résoudre. C’est là que le web scraping intervient.
L’importance croissante accordée à l’analyse du comportement des clients pousse davantage d’entreprises du retail à recourir au web scraping pour extraire des données. Elles peuvent notamment surveiller les prix de leurs concurrents, la disponibilité des produits et les avis clients.
Dans ce tutoriel, nous verrons comment réaliser du web scraping avec Python afin de mieux analyser les données produit sur Amazon.
Configuration initiale : que faut-il télécharger ?
Avant de scraper des pages Amazon avec Python, assurez-vous que votre environnement est correctement configuré. Si Python 3.x n’est pas installé sur votre ordinateur, vous pouvez le télécharger depuis https://www.python.org/.
- Visual Studio Code (VS Code)
Pour exécuter toutes les commandes nécessaires, vous pouvez utiliser le terminal dans Visual Studio Code (VS Code). Téléchargez simplement VS Code depuis le site officiel et suivez les instructions d’installation correspondant à votre système d’exploitation.
Pour configurer votre environnement Python:
- Ouvrez VS Code et installez l’extension Python en cliquant sur l’icône carrée dans la barre latérale.
Si Python n’est pas installé, le message suivant s’affichera : introuvable: python. Si tout fonctionne, la version installée s’affichera comme ci-dessous.
Créez un nouveau dossier pour votre projet :
- Dans VS Code, ouvrez le dossier dans lequel vous souhaitez créer votre projet en sélectionnant Fichier – Ouvrir le dossier. Créez un nouveau fichier Python pour votre script, par exemple: amazon_scraper.py
Installez les bibliothèques Python nécessaires
Pour cette étape, vous aurez besoin de pip. pip, également connu sous le nom pip3, est le gestionnaire de packages de Python. Il permet d’installer et de gérer des packages logiciels.
- Une fois le terminal ouvert, vous pouvez installer les bibliothèques nécessaires avec pip, le programme d’installation de packages de Python. Vérifiez d’abord que vous avez déjà installé pip déjà installé:
*Pour installer pip, vous pouvez utiliser ensurepip. Saisissez l’une des commandes suivantes dans le terminal:
python -m ensurepip
python3 -m ensurepip
- Utilisez maintenant pip pour installer les bibliothèques nécessaires. Nous avons besoin de “requests”, “beautifulsoup4”, “pandas”, “lxml” et “html5lib”.
pip3 install requests
pip3 install beautifulsoup4
pip3 install pandas
pip3 install lxml
pip3 install html5lib
Pourquoi avons-nous besoin de ces bibliothèques ?
-
- Requests : cette bibliothèque permet d’envoyer des requêtes HTTP vers une page Amazon et d’en récupérer le contenu HTML brut.
- Beautiful Soup : cette bibliothèque permet d’extraire les données voulues à partir du HTML brut récupéré avec Requests.
- Pandas: cette bibliothèque sert à manipuler et analyser les données. Vous pouvez organiser les données récupérées dans des DataFrames pour les analyser efficacement et les exporter, par exemple au format CSV.
- lxml: une bibliothèque efficace pour analyser rapidement des documents XML et HTML.
- html5lib: une bibliothèque Python permettant d’analyser du HTML conformément à la spécification HTML5.
Scraping des informations produit
Passons à l’étape principale. Parmi toutes les informations disponibles sur Amazon, nous allons scraper les éléments suivants :
- Nom du produit;
- Note;
- Prix;
- Images;
- Description.
Pour ce tutoriel, nous avons choisi ce produit : https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY
Envoi d’une requête vers la page produit
*Avant d’envoyer une requête, importons les bibliothèques que nous venons d’installer :
import requests
from bs4 import BeautifulSoup
import pandas as pd
À cette étape, nous enverrons une requête HTTP à l’URL de la page produit Amazon pour récupérer son contenu HTML. Avec la bibliothèque Requests, vous pouvez simuler la requête d’un navigateur web pour accéder à la page. Ajoutez des en-têtes appropriés, tels que User-Agent, afin d’imiter un vrai navigateur et d’éviter les échecs de connexion. La réponse du serveur, contenant le contenu HTML de la page, est ensuite stockée pour un traitement ultérieur et une extraction des données.
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept-Language': 'en-US, en;q=0.5'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')
Nom du produit
- Emplacement
Après avoir inspecté le titre, vous constaterez que son texte se trouve dans la balise h1 avec l’id productTitle. Revenez à votre fichier et écrivez le code permettant d’extraire cette information d’Amazon.
- Scraper le nom du produit
Nous extrairons le nom du produit du contenu HTML de la page produit Amazon. Avec la bibliothèque BeautifulSoup bibliothèque, nous analysons le contenu HTML et localisons l’élément avec l’nom du produit à l’aide de sa balise HTML et de ses attributs. Une fois l’élément trouvé, nous extrayons le contenu du texte, souvent en utilisant des méthodes telles que find() ou find_all() avec des sélecteurs CSS ou des expressions XPath. Enfin, le nom du produit extrait est formaté selon les besoins avant l’étape suivante.
*Avec la bibliothèque text permet d’extraire le contenu textuel.
product_name_element = soup.find('span', {'id': 'productTitle'})
product_name = product_name_element.text.strip()
print('Product Name:', product_name)
Après avoir exécuté ce code, nous obtiendrons le résultat suivant dans le terminal:
Images du produit
- Emplacement
Pour extraire les images de la page produit Amazon, vous devez localiser les éléments HTML contenant les URL des images. Sur les pages de produits Amazon, les images sont souvent stockées dans les balises ‘img’. Une classe courante pour les images dynamiques sur Amazon est ‘a-dynamic-image’.
- Scraper les images produit
Utilisez BeautifulSoup pour analyser le contenu HTML récupéré par la requête. Extrayez l’attribut ‘src’ attribut de chaque ‘img’, qui contient l’URL de l’image.
image_tags = soup.find_all('img', {'class':'a-dynamic-image'})
product_images = [img['src'] for img in image_tags]
print('Product Images:', product_images)
*Ce code peut parfois ne pas renvoyer le résultat attendu. S’il affiche 0 image, inspectez la structure HTML et vérifiez que la classe et l’attribut sont corrects. Dans ce cas, vous pouvez essayer le code suivant :
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
image_tags = soup.find_all('img')
product_images = []
for img_tag in image_tags:
image_url = img_tag.get('src')
if image_url:
product_images.append(image_url)
print('Product Images:', product_images)
else:
print(f"Request failed with status code: {response.status_code}")
Ce code renverra toutes les images haute résolution du produit dans une liste.
*Les pages produit Amazon contiennent souvent plusieurs images pour un même produit. Traitez tous les éléments de la liste afin de récupérer toutes les images pertinentes.
Note du produit
- Emplacement
Vous trouverez la note dans la première balise ‘i ayant pour classe ‘a-icon-alt’.
*Adaptez le nom de la classe à la structure HTML de la page produit Amazon que vous scrapez. Si son nom diffère, remplacez ‘a-icon-alt’ avec l’nom de classe correct.
- Note du produit à gratter
Pour extraire la note du produit, localisez l’élément HTML correspondant sur la page Amazon à l’aide de son attribut ‘class’, par exemple ‘a-icon-alt. Une fois l’élément trouvé, récupérez son contenu textuel, qui correspond à la note, puis nettoyez-le pour la suite du traitement.
product_rating = soup.find('span', {'class': 'a-icon-alt'}).text.strip()
print('Product Rating:', product_rating)
Vous obtiendrez le résultat suivant :
Prix du produit
- Emplacement
Pour extraire le prix du produit, identifiez l’élément HTML qui affiche le prix, en particulier celui situé juste sous la note. Sur la page produit Amazon, le prix se trouve généralement dans une balise ‘span’‘ ayant la classe ‘a-price’. Une fois cette balise ‘span’ localisée, accédez à sa première balise ‘span’ pour récupérer la valeur réelle du prix.
- Scraper le prix du produit
Dans ce code, la variable conteneur de prix contient l’élément ‘span’ ayant la classe ‘a-price’, tandis que price récupère le texte de sa première balise ‘span’‘ ayant la classe ‘a-offscreen’, qui contient le prix.
product_price = soup.find('span', {'class': 'a-offscreen'}).text.strip()
print('Product Price:', product_price)
Le résultat sera le suivant :
Description du produit
- Emplacement
Pour extraire la description du produit de la page produit Amazon, vous devez localiser les éléments HTML contenant la description. Les descriptions de produits Amazon se trouvent souvent dans une balise ‘div’ ou ‘span’ étiquette avec l”id productDescription’. Si le ‘spécifiquediv’ n’est pas trouvé, il vérifie le ‘ul’ avec la classe ‘a-unordered-list a-vertical a-spacing-mini’ pour les descriptions à puces.
*Les détails de la description sont stockés dans le fichier ‘tr’ balises avec la classe ‘a-spacing-small’. Une fois ces éléments trouvés, récupérez également la balise ‘span’ qu’ils contiennent pour obtenir le texte.
-
Scraper la description du produit
En exécutant ce script, vous devriez pouvoir extraire la description du produit depuis la section ‘feature-bullets‘ de la page produit Amazon. Cette section contient généralement des puces décrivant les caractéristiques du produit.
description_section = soup.find('div', {'id': 'feature-bullets'})
product_description = description_section.get_text(separator=' ').strip()
print('Product Description:', product_description)
Vous obtiendrez ceci :
Après avoir récupéré toutes les informations requises, vous pouvez stocker les données dans un dictionnaire. Ensuite, vous pouvez convertir ce dictionnaire en un DataFrame pandas pour faciliter la manipulation et l’affichage des données.
product_info = {
'Name': product_name,
'Rating': product_rating,
'Price': product_price,
'Images': product_images,
'Description': product_description
}
df = pd.DataFrame([product_info])
print(df)
Code complet
Vous pouvez facilement modifier le code pour collecter davantage de données à partir de la page produit Amazon, telles que des avis clients, des détails sur le produit ou des informations sur le vendeur. En vérifiant la structure HTML, vous pouvez ajuster le code pour extraire ces éléments supplémentaires. Ce code peut servir à un usage personnel ou être intégré à une application de suivi des prix Amazon afin d’aider les utilisateurs à trouver les meilleures offres.
Voici le code complet. En suivant ce didacticiel étape par étape, vous pouvez voir comment fonctionne chaque partie du code et apporter d’autres modifications pour répondre à vos besoins spécifiques.
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.amazon.com/Apple-2023-MacBook-512GB-Storage/dp/B0CB9BWMPY'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept-Language': 'en-US, en;q=0.5'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')
product_name_element = soup.find('span', {'id': 'productTitle'})
product_name = product_name_element.text.strip()
print('Product Name:', product_name)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
image_tags = soup.find_all('img')
product_images = []
for img_tag in image_tags:
image_url = img_tag.get('src')
if image_url:
product_images.append(image_url)
print('Product Images:', product_images)
else:
print(f"Request failed with status code: {response.status_code}")
product_rating = soup.find('span', {'class': 'a-icon-alt'}).text.strip()
print('Product Rating:', product_rating)
product_price = soup.find('span', {'class': 'a-offscreen'}).text.strip()
print('Product Price:', product_price)
image_tags = soup.find_all('img', {'class': 'a-dynamic-image'})
product_images = [img['src'] for img in image_tags]
print('Product Images:', product_images)
description_section = soup.find('div', {'id': 'feature-bullets'})
product_description = description_section.get_text(separator=' ').strip()
print('Product Description:', product_description)
product_info = {
'Name': product_name,
'Rating': product_rating,
'Price': product_price,
'Images': product_images,
'Description': product_description
}
df = pd.DataFrame([product_info])
print(df)
Lorsque vous exécutez le script, le DataFrame s’affiche dans la console ou le terminal Python sous forme de tableau, avec les données organisées en lignes et en colonnes.
Conseils pour scraper des pages Amazon avec Python :
- Respectez les conditions d’utilisation d’Amazon;
- Analysez soigneusement le HTML et prévoyez des contrôles de sécurité;
- Mettez régulièrement à jour votre code car la structure des pages Amazon peut changer;
- Utilisez des en-têtes appropriés tels que “User-Agent” et “Accept-Language”;
- Utilisez les proxys et la rotation IP.
Essayez DataImpulse pour scraper Amazon
Lorsque vous utilisez des proxys, vous envoyez des requêtes à partir de différentes adresses IP, comme si elles provenaient de différents appareils, emplacements et fuseaux horaires. Les sites auront moins de raisons de vous suspecter, de vous demander un captcha ou de vous bloquer. Avec nous, vous obtiendrez:
- Des données à jour;
- Rotation des adresses IP et absence d’adresses IP sur liste noire;
- Résolution des problèmes de vérification;
- Des API intuitives qui s’adaptent rapidement aux changements dans la structure HTML d’Amazon;
- Infrastructure puissante, parfaite pour les grands projets de scraping;
- Assistance humaine 24h/24 et 7j/7.
Contactez-nous au [email protected] ou cliquez sur le bouton “Essayez maintenant” situé dans le coin supérieur droit.
*Ce didacticiel est purement pédagogique et sert de démonstration des capacités techniques. Il est important de reconnaître que la récupération des données d’Amazon soulève des inquiétudes concernant les conditions d’utilisation et la légalité. Le scraping non autorisé peut entraîner de graves conséquences, notamment des poursuites judiciaires et la suspension du compte. Procédez toujours avec prudence et suivez les directives éthiques.



















