Comment faire du web scraping sur Amazon : guide 2024

Apprenez à faire du web scraping Amazon avec Python et à utiliser le navigateur Scraping Browser de Bright Data.
18 min read
How To Scrape Amazon

Vous vous demandez peut-être : pourquoi Amazon, au juste ? Amazon est l’une des plus grandes plateformes de commerce en ligne au monde ; à ce titre, il s’agit d’une source inépuisable de données qui peut vous aider à faire la différence. Ces données contiennent toutes sortes de détails sur les produits, les prix, les commentaires des clients et les tendances émergentes. Par exemple, les revendeurs peuvent utiliser ces données pour leurs veilles concurrentielles ; les chercheurs peuvent analyser les tendances du marché ; et les consommateurs peuvent prendre des décisions d’achat éclairées. Les possibilités sont infinies.

Dans ce tutoriel, vous apprendrez à faire du web scraping sur Amazon en utilisant des outils tels que Beautiful Soup et Playwright. Au terme de ce processus étape par étape, vous découvrirez également la solution proposée par Bright Data, qui permet d’accélérer considérablement le travail.

Extraire manuellement des données sur Amazon avec Python

Avant de commencer à extraire des données du site web d’Amazon, vous devez vous assurer que toutes les bibliothèques requises sont installées sur votre machine. Quelques connaissances de base sur le web scraping et sur HTML peuvent également s’avérer utiles.

Remarque importante : Ce tutoriel est uniquement destiné à des fins de formation et de démonstration de capacités techniques. Il est important de reconnaître que la collecte de données sur Amazon soulève des préoccupations vis-à-vis des conditions d’utilisation de la plateforme et au niveau légal. Le web scraping non autorisé peut avoir de sérieuses conséquences, y compris des poursuites judiciaires et des suspensions de comptes. Agissez toujours avec prudence et de manière éthique.

Prérequis

Pour effectuer ce tutoriel, Python doit être installé sur votre machine. Si vous êtes novice, lisez ce guide du web scraping avec Python pour obtenir des instructions détaillées. Si vous utilisez déjà Python, assurez-vous qu’il s’agit de la version 3.7.9 ou supérieure.

Une fois Python prêt, ouvrez votre terminal ou shell et créez un nouveau répertoire de projet en utilisant les commandes suivantes :

mkdir scraping-amazon-python && cd scraping-amazon-python

Une fois que vous avez mis en place le répertoire du projet, l’étape suivante consiste à installer un ensemble de bibliothèques supplémentaires qui sont indispensables pour un web scraping efficace. Plus précisément, vous utiliserez Requests, bibliothèque conçue pour gérer les requêtes HTTP en Python ; pandas, bibliothèque robuste conçue pour la manipulation et l’analyse de données ; Beautiful Soup (BS4), pour analyser le contenu HTML ; et Playwright, pour automatiser les tâches liées à la navigation sur le web.

Pour installer ces bibliothèques, ouvrez votre terminal ou shell, puis exécutez les commandes suivantes :

pip3 install beautifulsoup4
pip3 install requests
pip3 install pandas
pip3 install playwright
playwright install

Assurez-vous que le processus d’installation se termine sans problème avant de passer à l’étape suivante.

Remarque : La commande finale (c’est-à-dire playwright install) est cruciale car elle garantit que les fichiers binaires de navigateur dont vous avez besoin sont correctement installés.

Examen des composants de mise en page et de données d’Amazon

Une fois que vous avez installé les bibliothèques nécessaires, vous devez vous familiariser avec la structure du site d’Amazon. La page principale d’Amazon présente une barre de recherche conviviale, qui vous permet d’explorer un large éventail de produits – électronique, livres, et bien d’autres.

Une fois que vous avez entré vos critères de recherche, les résultats sont présentés sous la forme d’une liste de produits indiquant leur dénomination, prix, note et autres détails pertinents. Il est à noter que ces résultats de recherche peuvent être triés à l’aide de différents filtres, tels que la fourchette de prix, la catégorie de produits et les avis des clients :

Amazon

Dans le cas où vous désirez une liste de résultats plus complète, vous pouvez utiliser les boutons de pagination situés en bas de la page. Chaque page héberge généralement plusieurs listings, afin de vous donner la possibilité de découvrir des produits supplémentaires. Les filtres situés en haut de la page vous permettent d’affiner votre recherche en fonction de vos besoins.

Pour avoir un aperçu de la structure HTML du site d’Amazon, procédez comme suit :

  1. Accédez au site d’Amazon.
  2. Saisissez le produit souhaité dans la barre de recherche ou sélectionnez une catégorie dans la liste des produits sélectionnés.
  3. Ouvrez les DevOps du navigateur en cliquant avec le bouton droit de la souris sur un produit et en sélectionnant Inspecter l’élément.
  4. Explorez la disposition HTML de votre sélection pour identifier les balises et les attributs des données que vous souhaitez extraire.

Collecter des données sur les produits Amazon

Maintenant que vous vous êtes familiarisé avec la structure des produits Amazon, vous allez, dans cette section, collecter des détails tels que le nom d’un produit, sa note, le nombre de notes qu’il a reçues et son prix.

Dans le répertoire de votre projet, créez un nouveau script Python nommé amazon_scraper.py et ajoutez-y le code suivant :

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
async def scrape_amazon():
    async with async_playwright() as pw:
        # Launch new browser
        browser = await pw.chromium.launch(headless=False)
        page = await browser.new_page()
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon())
df = pd.DataFrame(results)
df.to_csv('amazon_products_listings.csv', index=False)

Dans ce code, vous utilisez les capacités asynchrones de Python avec la bibliothèque Playwright afin de scraper des listes de produits figurant dans une page Amazon spécifique consacrée à la mode. Une fois que vous lancez une nouvelle instance de navigateur et que vous accédez à l’URL Amazon cible, vous extrayez des informations sur un produit telles que son nom, sa note, le nombre d’avis donnés sur lui et son prix. Après avoir effectué une itération sur chaque annonce figurant sur la page, vous filtrez les listes qui ne contiennent pas de données (c’est-à-dire que vous les marquez comme “N/A”). Les résultats de votre scraping sont ensuite enregistrés dans un DataFrame Pandas, puis exportés dans un fichier CSV nommé amazon_products_listings.csv.

Pour exécuter le script, exécutez python3 amazon_scraper.py dans votre terminal ou shell. Votre sortie devrait ressembler à ceci :

product_name,rating,number_of_reviews,price
Crocs Women's Kadee Ii Sandals,4.2,17.5K+,$29.99
Teva Women's W Flatform Universal Sandal,4.7,7K+,$58.80
"OOFOS OOriginal Sport Sandal - Lightweight Recovery Footwear - Reduces Stress on Feet, Joints & Back - Machine Washable - Hand-Painted Graphics",4.5,9.4K+,N/A
"Crocs Women's Brooklyn Low Wedges, Platform Sandals",4.6,11.7K+,N/A
Teva Women's Original Universal Sandal,4.7,18.7K+,$35.37
Reef Women's Water Vista Sandal,4.5,1.9K+,$59.95
Crocs Women's Brooklyn Platform Slides Sandal,4.2,376,N/A
…output omitted…

Remarque : Si le script ne fonctionne pas la première fois que vous l’exécutez, essayez de l’exécuter à nouveau. Amazon a mis en place des mesures anti-scraping sophistiquées susceptibles de contrarier ou de bloquer vos tentatives de collecte de données.

Techniques avancées de web scraping sur Amazon  

Lorsque vous commencerez à effectuer des tâches de web scraping sur Amazon, vous découvrirez rapidement que ce géant du commerce en ligne, connu pour la complexité de ses pages web, vous posera des problèmes dont la résolution nécessitera bien plus que de simples méthodes de scraping de base. Voici quelques techniques avancées susceptibles de contribuer à une expérience de web scraping fluide et efficace :

Gérer la pagination

Amazon affiche un certain nombre de produits, souvent sur plusieurs pages. Pour capturer toutes les données, votre script doit être capable de naviguer dans ces pages de manière transparente. Une méthode courante consiste à cibler le bouton Suivant en bas des listes de produits. En identifiant son sélecteur unique, vous pouvez programmer votre script pour qu’il clique sur ce bouton, ce qui vous mènera à la page suivante. Cependant, assurez-vous que votre web scraper attend que tous les éléments se chargent avant de continuer.

Contourner les publicités

Les listes de produits Amazon contiennent souvent des publicités. Ces publicités peuvent avoir une structure légèrement différente de celles des produits ordinaires, ce qui risque d’entraver votre processus de web scraping. Pour résoudre ce problème, vous devez détecter les éléments ou les balises qui se rapportent à une publicité. Par exemple, recherchez des balises avec des intitulés tels que Sponsored ou Ad. Une fois que vous les avez détectées, vous pouvez demander à votre script d’ignorer ces entrées, de manière à ne collecter que les véritables données de produits.

Limiter les problèmes de blocage

Amazon, qui surveille étroitement ses contenus, peut bloquer ou suspendre temporairement des activités qu’il juge suspectes ou effectuées par des bots. Il est crucial de faire en sorte que votre web scraper paraisse aussi humain que possible.

Pour éviter de vous faire bloquer, vous devez introduire des délais ou des intervalles aléatoires entre les requêtes en utilisant des fonctions telles que asyncio.sleep(random.uniform(1, 5)). Cela rend votre schéma de web scraping moins robotique. En outre, envisagez d’assurer la rotation de vos agents utilisateurs et de vos adresses IP pour réduire les risques de détection. L’utilisation de services de résolution de CAPTCHA peut également être bénéfique si vous êtes confronté à des problèmes de CAPTCHA.

Gérer les contenus dynamiquement

Certains contenus Amazon, comme les avis ou les sections de Q&R, se chargent dynamiquement et un web scraper ordinaire risque de passer à côté des données ainsi chargées. Vous devez vous assurer que votre web scraper est capable d’exécuter JavaScript et d’attendre que le contenu dynamique soit bien chargé. Avec des outils tels que Playwright ou Selenium, vous pouvez utiliser des attentes explicites, de manière à ce que certains éléments spécifiques soient chargés avant que le web scraper ne continue son travail.

Définissez une limite de collecte

Malheureusement, en cas d’envoi de trop nombreuses requêtes simultanées, votre adresse IP risque de se retrouver blacklistée. Pour éviter que cela ne se produise, vous devez limiter le débit auquel vous envoyez des requêtes.

Écrivez votre script de manière à ce qu’il ne bombarde pas de requêtes les serveurs d’Amazon. Comme nous le disions précédemment, il est essentiel de prévoir un délai raisonnable entre les requêtes.

En mettant en œuvre ces techniques avancées, vous améliorerez non seulement l’efficacité de vos efforts de web scraping sur Amazon, mais vous assurerez également leur longévité, en réduisant les chances que votre web scraper soit détecté ou bloqué.

Envisagez d’utiliser Bright Data pour faire du web scraping sur Amazon

Bien que le web scraping manuel puisse se montrer efficace pour des tâches limitées, il peut s’avérer fastidieux et moins performant lorsque vous travaillez sur de gros volumes de données. Pour une approche plus rationalisée de la collecte de grandes quantités de données sur Amazon, envisagez d’utiliser Bright Data.

Avec le Scraping Browser de Bright Data, qui est capable de naviguer habilement dans JavaScript, les requêtes AJAX et autres complexités, vous pouvez interagir de manière transparente avec des sites dynamiques comme Amazon. Ou si vous devez vous procurer rapidement des données Amazon structurées, qu’il s’agisse de listings de produits, d’avis ou de profils de revendeurs, vous pouvez accéder immédiatement à notre jeu de données Amazon, qui vous permettra de télécharger et d’accéder à des données sélectionnées, directement issues de la plateforme Amazon.

Créer un compte Bright Data

Pour commencer à utiliser Bright Data, vous devez créer et configurer votre compte. Pour ce faire, procédez comme suit :

Ouvrez votre navigateur et accédez au site de Bright Data. Cliquez sur Démarrer un essai gratuit et continuez en suivant l’invite à l’écran.

Une fois dans votre tableau de bord, repérez l’icône de carte de crédit dans la barre latérale gauche pour accéder à la page de facturation. Ici, introduisez un mode de paiement valide pour activer votre compte :

Page de facturation.

Ensuite, rendez-vous dans la section Proxys & Scraping Infrastructure en sélectionnant l’icône correspondante. Choisissez Scraping Browser > Get Started :

Scraping Browser

Nommez votre solution et confirmez avec le bouton Add :

Sous Access parameters, prenez une minute pour noter votre nom d’utilisateur, hôte (par défaut) et mot de passe. Vous en aurez besoin ultérieurement :

Une fois ces étapes terminées, vous êtes prêt à extraire vos données.

Extraire les données de produits Amazon à l’aide du Scraping Browser

Pour commencer à collecter des données de produits sur Amazon à l’aide de Bright Data, créez un nouveau fichier nommé amazon_scraper_bdata.py et ajoutez-y le code suivant :

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_DEFAULT_HOST'
browser_url = f'wss://{auth}@{host}'
async def scrape_amazon_bdata():
    async with async_playwright() as pw:
        print('connecting')
        # Launch new browser
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected')
        page = await browser.new_page()
        print('navigating')
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011', timeout=600000)
        print('data extraction in progress')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon_bdata())
df = pd.DataFrame(results)
df.to_csv('amazon_products_bdata_listings.csv', index=False)

Dans ce code, vous utilisez la bibliothèque Playwright en association avec asyncio pour extraire de manière asynchrone les détails des produits d’une page web d’Amazon. Vous configurez les détails d’authentification pour Bright Data, un service de proxys, puis vous vous connectez à un navigateur à l’aide de ce service.

Une fois connecté, le script navigue vers l’URL Amazon spécifiée, extrait des informations sur les produits, telles que nom, note, nombre d’avis et prix, puis compile ces éléments dans une liste. Si un produit particulier ne possède aucune des données ci-dessus, il est ignoré.

Une fois la collecte de données terminée, le navigateur est fermé et les informations extraites sur les produits sont enregistrées dans un fichier CSV nommé amazon_products_bdata_listings.csv.

Important : n’oubliez pas de remplacer YOUR_BRIGHTDATA_USERNAME, YOUR_BRIGHTDATA_PASSWORD et YOUR_BRIGHTDATA_HOST par les identifiants uniques de votre compte de zone Bright Data (que vous trouverez sous l’onglet « Paramètres d’accès »).

Exécutez le code à partir de votre terminal ou shell à l’aide de la commande suivante :

python3 amazon_scraper_bdata.py

Votre sortie devrait ressembler à ceci :

product_name,rating,number_of_reviews,price
Women's Square Neck Bodice Dress Sleeveless Tank Top Stretch Flare Mini Dresses,N/A,131,$32.99
"Women's Swiftwater Sandal, Lightweight and Sporty Sandals for Women",N/A,"35,941",$19.95
Women's Elegant Sleeveless Off Shoulder Bodycon Long Formal Party Evening Dress,N/A,"3,122",$49.99
Women 2023 Summer Sleeveless Tank Dresses Crew Neck Slim Fit Short Casual Ruched Bodycon Party Club Mini Dress,N/A,"40,245",$33.99
"Infinity Dress with Bandeau, Convertible Bridesmaid Dress, Long, Plus Size, Multi-Way Dress, Twist Wrap Dress",N/A,"11,412",$49.99
…output omitted…

Alors que le web scraping manuel d’Amazon risque de se heurter à des problèmes, tels que les CAPTCHA et les restrictions d’accès, le Scraping Browser de Bright Data offre la résilience et la flexibilité nécessaires pour résoudre ces difficultés, de manière à poursuivre l’extraction de données sans interruption.

Les jeux de données Amazon de Bright Data

Si vous ne souhaitez pas collecter des données manuellement, Bright Data propose également des jeux de données Amazon prêts à l’emploi. Dans ces jeux de données, vous trouverez tout, des détails des produits aux avis des utilisateurs. Utiliser ces jeux de données vous permet d’éviter de faire du web scraping par vous-même sur vos pages cibles, et les données sont déjà organisées pour vous.

Pour trouver ces jeux de données, accédez à votre tableau de bord Bright Data et cliquez sur Datasets & Web scraper IDE sur la gauche. Cliquez ensuite sur Get Data à partir de Dataset Marketplace :

Ensuite, recherchez « amazon » dans la barre de recherche. Cliquez ensuite sur View dataset :

Choisissez le jeu de données qui correspond à ce dont vous avez besoin. Vous pouvez utiliser des filtres pour affiner vos choix. Rappelez-vous que le coût dépend de la quantité de données que vous souhaitez obtenir ; vous pouvez donc faire votre choix en fonction de vos besoins et de votre budget :

Vous pouvez trouver le code utilisé dans ce tutoriel sur le référentiel GitHub suivant.

Conclusion

Dans ce tutoriel, vous avez appris à collecter manuellement des données sur Amazon en utilisant Python, ce qui comporte clairement certaines difficultés, telles que les CAPTCHA et les limitations de débit, qui risquent d’entraver l’efficacité de vos efforts de web scraping. Cependant, l’utilisation des outils et du Scraping Browser de Bright Data permet de simplifier le processus et d’atténuer ces problèmes.

Bright Data fournit des outils qui simplifient la collecte de données sur Internet, par exemple sur Amazon. Ces outils simplifient grandement les tâches de web scraping, ce qui vous permet d’économiser du temps et de l’énergie.

De plus, Bright Data propose des jeux de données prêts à l’emploi spécialement consacrés à Amazon. Cela signifie que vous n’avez pas besoin de démarrer à partir de zéro ; vous pouvez accéder directement à de grandes quantités de données issues du site d’Amazon.

Avec les outils de Bright Data, la collecte de données devient un jeu d’enfant, ce qui ouvre la porte à de nouvelles perspectives et à de nouvelles connaissances. Lancez-vous et découvrez de nouvelles possibilités de collecte de données avec Bright Data !