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 basé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 premier choix pour le web scraping. S'il n'est pas déjà installé, reportez-vous à 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 que Python est installé. Si vous n'avez pas Python 3.8 ou version ultérieure, visitez python.org pour télécharger et installer la dernière version.
Ensuite, créez un répertoire pour stocker vos fichiers de code de web scraping pour Amazon. C'est généralement une bonne idée de mettre en place 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 les données des fichiers HTML et XML. Il vous permet de récupérer des informations sur une page Web en recherchant des balises, des attributs ou un texte spécifique.
Pour installer les deux bibliothèques, utilisez la commande suivante :
$ python3 -m pip install requests beautifulsoup4
Pour les utilisateurs Windows, remplacez « python3 » par « python », en conservant le reste de la commande :
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 Requests. Créez un nouveau fichier appelé amazon.py et entrez 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 demande et vous recevrez la réponse suivante :
To discuss automated access to Amazon data please contact [email protected].
Si vous imprimez le réponse.status_code, vous verrez que vous recevez une erreur 503 au lieu d'un code de réussite 200.
Amazon sait que cette demande ne provient pas d'un navigateur et la bloque. Cette pratique est courante sur de nombreux sites Web. Amazon peut bloquer vos demandes et renvoyer un code d'erreur commençant par 500 ou parfois même 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
Dans le processus de web scraping des produits Amazon, vous utiliserez généralement 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 que vous avez rassemblé ces informations, 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 distincte de sélection de balises à l’aide des méthodes de recherche. Il prend également en charge les sélecteurs CSS comme alternative. Vous pouvez utiliser l’une ou l’autre approche pour obtenir le même résultat. Dans ce didacticiel, nous utiliserons les sélecteurs CSS, une méthode universelle de sélection d'éléments. Les sélecteurs CSS sont compatibles avec presque tous les outils de web scraping pour extraire des informations sur les produits 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 d'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 du produit.
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 verrez que tous les produits sont contenus dans un div doté d'un attribut unique [data-asin]. Dans ce div, tous les liens de produits sont 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. N’oubliez cependant 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 web scraping en fournissant un ensemble de données plus large à analyser. Lorsque vous ciblez plusieurs pages, vous devrez prendre en compte la pagination, qui est le processus de division du 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 à l'aide du
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.
Ci-dessous, vous trouverez un didacticiel vidéo YouTube complet qui vous guide tout au long du processus d'extraction de données à partir de plusieurs pages du site Web d'Amazon. Le didacticiel plonge en profondeur dans le monde du web scraping, en se concentrant sur les techniques qui vous permettront de collecter de manière efficace et efficiente des informations précieuses à partir de nombreuses pages Amazon.
Tout au long du didacticiel, le présentateur démontre l'utilisation d'outils et de bibliothèques essentiels, tels que Python, BeautifulSoup et les requêtes, tout en mettant en évidence les meilleures pratiques pour éviter d'être bloqué ou détecté par les mécanismes anti-bot d'Amazon. La vidéo couvre des sujets essentiels tels que la gestion de la pagination, la gestion des limites de débit et l'imitation du 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 plate-forme de commerce électronique populaire, il faut tenir compte de certaines choses. Examinons les questions fréquemment posées concernant la récupération 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 de respecter le site web cible. Même s'il est peu probable que vous surchargez le site Web d'Amazon avec trop de demandes, vous devez néanmoins suivre les directives de scraping éthique. Le scraping éthique peut minimiser le risque de faire face à des problèmes juridiques ou de faire face à des 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 sortons du labyrinthe passionnant du web scraping d'Amazon, il est temps de prendre un moment pour apprécier les connaissances et compétences inestimables que nous avons acquises au cours de ce voyage exaltant. Avec ProxyCompass comme guide de confiance, vous avez réussi à naviguer dans les méandres de l'extraction de données inestimables du géant de la vente au détail. Au fur et à mesure que vous vous aventurez, maniant avec finesse votre nouvelle expertise, n’oubliez pas que la jungle numérique ne cesse d’évoluer.
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 !