
Imaginez-vous comme un explorateur aventureux, plongeant tête première dans le vaste et mystérieux royaume de l'Amazonie, non pas la forêt tropicale, mais le géant de la vente au détail en ligne. À chaque clic, vous découvrez des trésors inestimables et approfondissez le territoire inexploré des données.
Dans cette expédition passionnante, nous présentons un guide étape par étape pour naviguer dans la jungle numérique dense du web scraping d'Amazon. Préparez-vous à vous lancer dans un voyage pas comme les autres, armé de trucs et astuces d'experts pour extraire des informations précieuses avec une précision inégalée.
Table des matières
- Quelles données extraire d'Amazon
- Quelques exigences de base
- Configuration pour le grattage
- Grattage des informations sur les produits Amazon
- Comment gratter plusieurs pages sur Amazon
- Scraping Amazon : FAQ
- Conclusion
Alors, rassemblez votre courage, enfilez vos bottes virtuelles et commençons ensemble notre aventure axée sur les données !
Quelles données extraire d'Amazon
Il existe de nombreux points de données associés à un produit Amazon, mais les éléments clés sur lesquels se concentrer lors du scraping incluent :
- Titre du produit
- Coût
- Économies (le cas échéant)
- Résumé de l'article
- Liste des fonctionnalités associées (si disponible)
- Note d'évaluation
- Visuels produits
Bien que ce soient les principaux aspects à prendre en compte lors de la récupération d'un article Amazon, il est important de noter que les informations que vous extrayez peuvent varier en fonction de vos objectifs spécifiques.
Quelques exigences de base
Pour préparer une soupe, il faut les bons ingrédients. De même, notre nouveau web scraper nécessite des composants spécifiques.
- Python — Sa convivialité et sa vaste collection de bibliothèques font de Python le choix idéal pour le web scraping. S'il n'est pas déjà installé, consultez ce guide.
- BeautifulSoup — Il s'agit de l'une des nombreuses bibliothèques de web scraping disponibles pour Python. Sa simplicité et son utilisation propre en font un choix populaire pour le web scraping. Après avoir installé Python avec succès, vous pouvez installer Beautiful Soup en exécutant : pip install bs4
- Compréhension de base des balises HTML — Consultez ce tutoriel pour acquérir les connaissances nécessaires sur les balises HTML.
- Navigateur Web — Étant donné que nous devons filtrer de nombreuses informations non pertinentes d'un site Web, des identifiants et des balises spécifiques sont requis à des fins de filtrage. Un navigateur Web comme Google Chrome ou Mozilla Firefox est utile pour identifier ces balises.
Configuration pour le grattage
Pour commencer, assurez-vous d'avoir installé Python. Si vous n'avez pas Python 3.8 ou une version ultérieure, rendez-vous sur python.org pour télécharger et installer la dernière version.
Créez ensuite un répertoire pour stocker vos fichiers de code de scraping web pour Amazon. Il est généralement judicieux de configurer un environnement virtuel pour votre projet.
Utilisez les commandes suivantes pour créer et activer un environnement virtuel sur macOS et Linux :
$ python3 -m venv .env
$ source .env/bin/activate
Pour les utilisateurs Windows, les commandes seront légèrement différentes :
d:amazon>python -m venv .env
d:amazon>.envscriptsactivate
Il est maintenant temps d'installer les packages Python nécessaires.
Vous aurez besoin de packages pour deux tâches principales : obtenir le code HTML et l’analyser pour extraire les données pertinentes.
La bibliothèque Requests est une bibliothèque Python tierce largement utilisée pour effectuer des requêtes HTTP. Il offre une interface simple et conviviale pour envoyer des requêtes HTTP aux serveurs Web et recevoir des réponses. C'est peut-être la bibliothèque de web scraping la plus connue.
Cependant, la bibliothèque Requests a une limitation : elle renvoie la réponse HTML sous forme de chaîne, ce qui peut être difficile à rechercher pour des éléments spécifiques comme les prix affichés lors de l'écriture de code de web scraping.
C'est là qu'intervient Beautiful Soup. Beautiful Soup est une bibliothèque Python conçue pour le web scraping, qui extrait des données de fichiers HTML et XML. Elle permet de récupérer des informations d'une page web en recherchant des balises, des attributs ou du texte spécifique.
Pour installer les deux bibliothèques, utilisez la commande suivante :
$ python3 -m pip install requests beautifulsoup4
Pour les utilisateurs de Windows, remplacez « python3 » par « python », en conservant le reste de la commande identique :
d:amazon>python -m pip install requests beautifulsoup4
Notez que nous installons la version 4 de la bibliothèque Beautiful Soup.
Testons maintenant la bibliothèque de scraping des requêtes. Créez un fichier appelé amazon.py et saisissez le code suivant :
import requests
url = 'https://www.amazon.com/Bose-QuietComfort-45-Bluetooth-Canceling-Headphones/dp/B098FKXT8L'
response = requests.get(url)
print(response.text)
Enregistrez le fichier et exécutez-le depuis le terminal.
$ python3 amazon.py
Dans la plupart des cas, vous ne pourrez pas afficher le code HTML souhaité. Amazon bloquera la requête et vous recevrez la réponse suivante :
To discuss automated access to Amazon data please contact [email protected].
Si vous imprimez le response.status_code, vous verrez que vous recevez une erreur 503 au lieu d'un code de réussite 200.
Amazon sait que cette requête ne provient pas d'un navigateur et la bloque. Cette pratique est courante sur de nombreux sites web. Amazon peut bloquer vos requêtes et renvoyer un code d'erreur commençant par 500, voire 400.
Une solution simple consiste à envoyer des en-têtes avec votre requête qui imitent ceux envoyés par un navigateur.
Parfois, envoyer uniquement le user-agent suffit. D'autres fois, vous devrez peut-être envoyer des en-têtes supplémentaires, tels que l'en-tête accept-lingual.
Pour trouver l'agent utilisateur envoyé par votre navigateur, appuyez sur F12, ouvrez l'onglet Réseau et rechargez la page. Sélectionnez la première demande et examinez les en-têtes de demande.
Copiez cet agent utilisateur et créez un dictionnaire pour les en-têtes, comme cet exemple avec les en-têtes user-agent et accept-langage :
custom_headers = { '
user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
'accept-language': 'en-GB,en;q=0.9',
}
Vous pouvez ensuite envoyer ce dictionnaire en paramètre facultatif dans la méthode get :
response = requests.get(url, headers=custom_headers
Grattage des informations sur les produits Amazon
Lors du processus de récupération de données Web sur les produits Amazon, vous interagissez généralement avec deux types de pages : la page de catégorie et la page de détails du produit.
Par exemple, visitez https://www.amazon.com/b?node=12097479011 ou recherchez des écouteurs supra-auriculaires sur Amazon. La page affichant les résultats de la recherche est appelée page de catégorie.
La page de catégorie présente le titre du produit, l'image du produit, l'évaluation du produit, le prix du produit et, plus important encore, la page des URL du produit. Pour accéder à plus d'informations, telles que les descriptions de produits, vous devez visiter la page de détails du produit.
Analysons la structure de la page de détails du produit.
Ouvrez une URL de produit, comme https://www.amazon.com/Bose-QuietComfort-45-Bluetooth-Canceling-Headphones/dp/B098FKXT8L, en utilisant Chrome ou un autre navigateur moderne. Cliquez avec le bouton droit sur le titre du produit et choisissez Inspecter. Le balisage HTML du titre du produit sera mis en évidence.
Vous remarquerez qu'il s'agit d'une balise span avec son attribut id défini sur « productTitle ».
De même, cliquez avec le bouton droit sur le prix et sélectionnez Inspecter pour afficher le balisage HTML du prix.
La composante en dollars du prix se trouve dans une balise span avec la classe « a-price-whole », tandis que la composante en cents se trouve dans une autre balise span avec la classe « a-price-fraction ».
Vous pouvez également localiser la note, l’image et la description de la même manière.
Une fois ces informations rassemblées, ajoutez les lignes suivantes au code existant :
response = requests.get(url, headers=custom_headers)
soup = BeautifulSoup(response.text, 'lxml')
Beautiful Soup propose une méthode unique pour sélectionner des balises grâce aux méthodes de recherche. Il prend également en charge les sélecteurs CSS. Vous pouvez utiliser l'une ou l'autre approche pour obtenir le même résultat. Dans ce tutoriel, nous utiliserons les sélecteurs CSS, une méthode universelle de sélection d'éléments. Les sélecteurs CSS sont compatibles avec la quasi-totalité des outils de web scraping permettant d'extraire les informations produit Amazon.
Vous êtes maintenant prêt à utiliser l’objet Soup pour interroger des informations spécifiques.
Extraction du nom du produit
Le nom ou le titre du produit se trouve dans un élément span avec l'identifiant « productTitle ». La sélection d'éléments à l'aide d'identifiants uniques est simple.
Considérez le code suivant comme exemple :
title_element = soup.select_one('#productTitle')
Nous passons le sélecteur CSS à la méthode select_one, qui renvoie une instance d'élément.
Pour extraire des informations du texte, utilisez l'attribut text.
title = title_element.text
Une fois imprimé, vous remarquerez peut-être quelques espaces blancs. Pour résoudre ce problème, ajoutez un appel de fonction .strip() comme suit :
title = title_element.text.strip()
Extraction des évaluations de produits
L'obtention d'évaluations de produits Amazon nécessite des efforts supplémentaires.
Tout d’abord, établissez un sélecteur pour la notation :
#acrPopover
Ensuite, utilisez l'instruction suivante pour sélectionner l'élément contenant la note :
rating_element = soup.select_one('#acrPopover')
Notez que la valeur réelle de la note se trouve dans l'attribut title :
rating_text = rating_element.attrs.get('title')
print(rating_text)
# prints '4.6 out of 5 stars'
Enfin, utilisez la méthode de remplacement pour obtenir la note numérique :
rating = rating_text.replace('out of 5 stars', '')
Extraction du prix du produit
Le prix du produit peut être trouvé à deux endroits : sous le titre du produit et dans la case Acheter maintenant.
L’une ou l’autre de ces balises peut être utilisée pour réduire les prix des produits Amazon.
Créez un sélecteur CSS pour le prix :
#price_inside_buybox
Passez ce sélecteur CSS à la méthode select_one de BeautifulSoup comme ceci :
price_element = soup.select_one('#price_inside_buybox')
Maintenant, vous pouvez imprimer le prix :
print(price_element.text)
Extraction d'une image
Pour récupérer l'image par défaut, utilisez le sélecteur CSS #landingImage. Avec ces informations, vous pouvez écrire les lignes de code suivantes pour obtenir l'URL de l'image à partir de l'attribut src :
image_element = soup.select_one('#landingImage')
image = image_element.attrs.get('src')
Extraction de la description du produit
La prochaine étape de l'extraction des données sur les produits Amazon consiste à obtenir la description du produit.
Le processus reste cohérent : créez un sélecteur CSS et utilisez la méthode select_one.
Le sélecteur CSS pour la description est :
#productDescription
Cela nous permet d'extraire l'élément comme suit :
description_element = soup.select_one('#productDescription')
print(description_element.text)
Gestion des listes de produits
Nous avons exploré la récupération des informations sur les produits, mais vous devrez commencer par la liste des produits ou les pages de catégories pour accéder aux données sur les produits.
Par exemple, https://www.amazon.com/b?node=12097479011 est la page de catégorie pour les écouteurs supra-auriculaires.
Si vous examinez cette page, vous constaterez que tous les produits sont contenus dans une balise div dotée d'un attribut unique [data-asin]. Dans cette balise div, tous les liens vers les produits sont inclus dans une balise h2.
Avec ces informations, le sélecteur CSS est :
[data-asin] h2 a
Vous pouvez lire l'attribut href de ce sélecteur et exécuter une boucle. Cependant, n'oubliez pas que les liens seront relatifs. Vous devrez utiliser la méthode urljoin pour analyser ces liens.
from urllib.parse import urljoin
...
def parse_listing(listing_url):
…
link_elements = soup_search.select("[data-asin] h2 a")
page_data = []
for link in link_elements:
full_url = urljoin(search_url, link.attrs.get("href"))
product_info = get_product_info(full_url)
page_data.append(product_info)
Gestion de la pagination
Le lien vers la page suivante se trouve dans un lien contenant le texte « Suivant ». Vous pouvez rechercher ce lien en utilisant l'opérateur contain de CSS comme suit :
next_page_el = soup.select_one('a:contains("Next")')
if next_page_el:
next_page_url = next_page_el.attrs.get('href')
next_page_url = urljoin(listing_url, next_page_url)
Exportation de données Amazon
Les données récupérées sont renvoyées intentionnellement sous forme de dictionnaire. Vous pouvez créer une liste contenant tous les produits récupérés.
def parse_listing(listing_url):
...
page_data = [] for link in link_elements:
...
product_info = get_product_info(full_url)
page_data.append(product_info)
Vous pouvez ensuite utiliser ce page_data pour créer un objet Pandas DataFrame :
df = pd.DataFrame(page_data)
df.to_csv('headphones.csv', index = False)
Comment gratter plusieurs pages sur Amazon
Le scraping de plusieurs pages sur Amazon peut améliorer l'efficacité de votre projet de scraping web en fournissant un ensemble de données plus large à analyser. Si vous ciblez plusieurs pages, vous devrez tenir compte de la pagination, qui consiste à répartir le contenu sur plusieurs pages.
Voici 6 points clés à garder à l’esprit lors du scraping de plusieurs pages sur Amazon :
- Identifiez le modèle de pagination : Tout d’abord, analysez la structure des URL de la catégorie ou des pages de résultats de recherche pour comprendre comment Amazon pagine son contenu. Il peut s'agir d'un paramètre de requête (par exemple, « ?page=2 ») ou d'un identifiant unique intégré dans l'URL.
- Extrayez le lien de la page « Suivant » : Localisez l'élément (généralement une balise d'ancrage) contenant le lien vers la page suivante. Utilisez le sélecteur CSS approprié ou la méthode Beautiful Soup pour extraire l'attribut href de cet élément, qui est l'URL de la page suivante.
- Convertissez les URL relatives en URL absolues : Étant donné que les URL extraites peuvent être relatives, utilisez le
urljoin
fonction à partir duurllib.parse
bibliothèque pour les convertir en URL absolues. - Créez une boucle : Implémentez une boucle qui parcourt les pages, en récupérant les données souhaitées de chacune. La boucle doit continuer jusqu'à ce qu'il ne reste plus de pages, ce qui peut être déterminé en vérifiant si le lien de la page « Suivant » existe sur la page actuelle.
- Ajoutez des délais entre les demandes : Pour éviter de surcharger le serveur d'Amazon ou de déclencher des mesures anti-bot, introduisez des délais entre les requêtes en utilisant le
time.sleep()
fonction à partir dutime
bibliothèque. Ajustez la durée du délai pour imiter le comportement de navigation humaine. - Gestion des CAPTCHA et des blocs : Si vous rencontrez des CAPTCHA ou des blocs IP lors du scraping de plusieurs pages, envisagez d'utiliser des proxys pour faire pivoter les adresses IP ou des outils et services de scraping dédiés capables de gérer automatiquement ces défis.
Vous trouverez ci-dessous un tutoriel vidéo YouTube complet qui vous guidera dans le processus d'extraction de données à partir de plusieurs pages du site web d'Amazon. Ce tutoriel explore en profondeur le monde du web scraping et se concentre sur les techniques qui vous permettront de collecter efficacement des informations précieuses sur de nombreuses pages Amazon.
Tout au long du tutoriel, le présentateur démontre l'utilisation d'outils et de bibliothèques essentiels, tels que Python, BeautifulSoup et les requêtes, tout en soulignant les bonnes pratiques pour éviter d'être bloqué ou détecté par les mécanismes anti-bots d'Amazon. La vidéo aborde des sujets essentiels comme la gestion de la pagination, la gestion des limites de débit et l'imitation d'un comportement de navigation humain.
En plus des instructions étape par étape fournies dans la vidéo, le didacticiel partage également des conseils et astuces utiles pour optimiser votre expérience de web scraping. Celles-ci incluent l'utilisation de proxys pour contourner les restrictions IP, la randomisation de l'agent utilisateur et des en-têtes de requête, et la mise en œuvre d'une gestion appropriée des erreurs pour garantir un processus de scraping fluide et ininterrompu.
Scraping Amazon : FAQ
Lorsqu'il s'agit d'extraire des données d'Amazon, une plateforme de commerce électronique populaire, certains points doivent être pris en compte. Examinons les questions fréquemment posées sur le scraping des données Amazon.
1. Est-il légal de gratter Amazon ?
La suppression de données accessibles au public sur Internet est légale, et cela inclut la suppression d'Amazon. Vous pouvez légalement récupérer des informations telles que les détails des produits, les descriptions, les notes et les prix. Cependant, lorsque vous supprimez des avis sur des produits, vous devez être prudent en ce qui concerne la protection des données personnelles et des droits d'auteur. Par exemple, le nom et l'avatar de l'évaluateur peuvent constituer des données personnelles, tandis que le texte de l'avis peut être protégé par le droit d'auteur. Faites toujours preuve de prudence et demandez un avis juridique lorsque vous supprimez de telles données.
2. Amazon autorise-t-il le scraping ?
Bien que le scraping de données accessibles au public soit légal, Amazon prend parfois des mesures pour empêcher le scraping. Ces mesures incluent des requêtes de limitation de débit, l'interdiction des adresses IP et l'utilisation des empreintes digitales du navigateur pour détecter les robots de grattage. Amazon bloque généralement le web scraping avec un code de réponse de statut de réussite 200 OK et vous demande de transmettre un CAPTCHA ou affiche un message d'erreur HTTP 503 Service non disponible pour contacter le service commercial pour une API payante.
Il existe des moyens de contourner ces mesures, mais le web scraping éthique peut aider à éviter leur déclenchement en premier lieu. Le scraping éthique du Web implique de limiter la fréquence des requêtes, d’utiliser des agents utilisateurs appropriés et d’éviter un scraping excessif qui pourrait avoir un impact sur les performances du site Web. En grattant de manière éthique, vous pouvez réduire le risque d'être banni ou de faire face à des conséquences juridiques tout en extrayant des données utiles d'Amazon.
3. Est-il éthique de supprimer les données Amazon ?
Le scraping éthique implique le respect du site web cible. Même s'il est peu probable que vous surchargez le site d'Amazon avec trop de requêtes, il est conseillé de respecter les règles de scraping éthique. Ce type de scraping peut minimiser les risques de poursuites judiciaires ou de mesures anti-scraping.
4. Comment puis-je éviter d'être banni lors du scraping d'Amazon ?
Pour éviter d'être banni lors du scraping d'Amazon, vous devez limiter vos taux de requêtes, éviter le scraping pendant les heures de pointe, utiliser la rotation de proxy intelligent et utiliser les agents utilisateurs et les en-têtes appropriés pour éviter la détection. De plus, extrayez uniquement les données dont vous avez besoin et utilisez des outils de scraping tiers ou des bibliothèques de scraping.
5. Quels sont les risques liés au grattage d'Amazon ?
La suppression des données Amazon comporte des risques potentiels, tels que des poursuites judiciaires et la suspension du compte. Amazon utilise des mesures anti-bot pour détecter et empêcher le scraping, notamment l'interdiction d'adresses IP, la limitation de débit et les empreintes digitales du navigateur. Cependant, en grattant de manière éthique, vous pouvez atténuer ces risques.
Conclusion
Alors que nous émergeons du labyrinthe fascinant du web scraping sur Amazon, il est temps de prendre un moment pour apprécier les précieuses connaissances et compétences acquises au cours de cette aventure exaltante. Avec ProxyCompass comme guide de confiance, vous avez su gérer avec brio les méandres de l'extraction de données précieuses auprès du géant de la vente au détail. Alors que vous vous aventurez, mettant à profit votre nouvelle expertise avec finesse, n'oubliez pas que la jungle numérique est en constante évolution.
Restez curieux, continuez à affûter votre machette de web scraping et continuez à conquérir le paysage en constante évolution de l'extraction de données. En attendant notre prochaine expédition audacieuse, explorateur intrépide, que vos quêtes basées sur les données soient fructueuses et enrichissantes !