Passer au contenu

Le guide ultime pour gratter Amazon avec Python (2023)

L'extraction des données d'Amazon, l'une des plus grandes plateformes de commerce électronique, peut fournir des informations précieuses. Que vous cherchiez à comparer les prix, à analyser les avis des clients ou à suivre la disponibilité des produits, le web scraping peut être un outil utile. Ce guide fournit des instructions détaillées et des exemples de code Python pour gratter Amazon.

Éthique du Web Scraping

Avant de plonger, il est important de noter que le grattage doit être effectué de manière responsable afin de minimiser la demande sur les serveurs du site Web. Pour ce faire, vous pouvez vous concentrer sur la page de recherche Amazon où vous pouvez extraire des données de base sur le produit telles que le nom, le prix, l'URL de l'image, la note et le nombre d'avis. Cette approche réduira considérablement le nombre de demandes que vous devez faire à Amazon, rendant votre scraper plus rapide et moins cher à exécuter.

Bibliothèques de grattage Web Python

Python offre une pléthore de bibliothèques pour le grattage Web, et le choix de la bonne dépend de vos besoins spécifiques et de votre niveau de confort avec Python. Voici quelques-unes des bibliothèques les plus couramment utilisées :

  1. Demandes: Une bibliothèque Python populaire pour faire des requêtes HTTP. Il résume les complexités de la création de requêtes derrière une API simple, vous permettant d'envoyer des requêtes HTTP/1.1 avec diverses méthodes telles que GET, POST et autres.
  2. BeautifulSoup: Il est utilisé pour analyser des documents HTML et XML et extraire des données. Il crée un arbre d'analyse à partir du code source de la page qui peut être utilisé pour extraire des données de manière hiérarchique et plus lisible.
  3. Scrapy: Un framework Python open-source conçu spécifiquement pour le web scraping. C'est un framework polyvalent qui peut gérer un large éventail de tâches de scraping et est capable de scraper de grands ensembles de données.
  4. Sélénium: Un outil puissant pour contrôler un navigateur Web via le programme. Il est très pratique pour le scraping Web car il peut gérer tous les types de contenu de site Web, y compris le contenu généré par JavaScript. Il permet également l'interaction de l'utilisateur comme le clic, le défilement, etc.
  5. parcelle: utilisé pour extraire des données HTML et XML à l'aide des sélecteurs XPath et CSS. Il est construit sur la bibliothèque lxml, ce qui le rend flexible et facile à utiliser.

Récupération des données produit des pages de recherche Amazon

La première étape du scraping d'Amazon consiste à extraire les données des pages de recherche. Les bibliothèques Python Requests et Parsel peuvent être utilisées pour cette tâche. Voici un exemple de script qui extrait les données produit de toutes les pages de recherche Amazon disponibles pour un mot clé donné (par exemple, "iPad") :

requêtes d'importation à partir de Parsel import Selector from urllib.parse import urljoin keyword_list = ['ipad'] product_overview_data = [] for keyword in keyword_list : url_list = [f'https://www.amazon.com/s?k={keyword} &page=1'] pour l'url dans url_list : essayez : response = requests.get(url) if response.status_code == 200 : sel = Selector(text=response.text) # Extract Product Page search_products = sel.css("div .s-result-item[data-component-type=s-search-result]") pour le produit dans search_products : relative_url = product.css("h2>a::attr(href)").get() asin = relative_url.split('/')[3] if len(relative_url.split('/')) >= 4 else None product_url = urljoin('https://www.amazon.com/', relative_url).split( "?")[0] product_overview_data.append( { "keyword": mot-clé, "asin": asin, "url": product_url, "ad": Vrai si "/slredirect/" dans product_url sinon False, "title": product.css("h2>a>span::text").get(), "price-data-a-size=xl .a-offscreen::text").get(), "real_price": produit. css(".a-price[data-a-size=b] .a-offscreen::text").get(), "rating": (product.css("span[aria-label~=stars] : :attr "rating_count": product.css("span[aria-label~=stars] + span::attr(aria-label)").get(), "thumbnail_url": product.xpath("//img[ has-class('s-image')]/@src").get(), } ) # Obtenir toutes les pages si "&page=1" dans l'url : available_pages = sel.xpath( '//a[has-class ("s-pagination-item")][not(has-class("s-pagination-separator"))]/text()' ).getall() pour la page dans available_pages : search_url_paginated = f'https:// www.amazon.com/s?k={keyword}&page={page}' url_list.append(search_url_paginated) sauf exception comme e : print("Error", e)

Ce script collectera un tableau de données produit, chacune représentée sous la forme d'un dictionnaire avec les clés suivantes :

  • keyword: Le mot-clé de recherche utilisé (par exemple, 'iPad')
  • asin: Le numéro d'identification standard Amazon unique du produit
  • url: L'URL du produit
  • ad: Un booléen indiquant si le produit est une annonce
  • title: Le titre du produit
  • price: Le prix du produit
  • real_price: Le prix d'origine du produit avant toute remise
  • rating: La note du produit
  • rating_count: Le nombre d'évaluations que le produit a reçues
  • thumbnail_url: L'URL de l'image miniature du produit

Le script identifie également toutes les pages disponibles pour le mot-clé de recherche et les ajoute au url_list pour gratter【9†source】.

Récupération des données produit des pages produit Amazon

Une fois que vous avez une liste d'URL de produits Amazon, vous pouvez récupérer toutes les données de produit de chaque page de produit Amazon individuelle. Voici un exemple de script utilisant les bibliothèques Python Requests et Parsel :

importer des demandes d'importation à partir de Parsel import Selector from urllib.parse import urljoin product_urls = [ 'https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1', ] product_data_list = [] pour product_url dans product_urls : essayez : réponse = requests.get(product_url) si response.status_code == 200 : sel = Selector(text=response.text) image_data = json.loads(re.findall (r"colorImages':.*'initial':\s*(\[.+?\])},\n", response.text)[0]) variant_data = re.findall(r'dimensionValuesDisplayData"\s *:\s* ({.+?}),\n', response.text) feature_bullets = [bullet.strip() pour puce dans sel.css("#feature-bullets li ::text").getall( )] prix = sel.css('.a-price span[aria-hidden="true"] ::text').get("") sinon prix : prix = sel.css('.a-price . a-offscreen ::text').get("") product_data_list.append({ "name": sel.css("#productTitle::text").get("").strip(), "price": prix, "étoiles": sel.css("i[data-hook=average-star-rating] ::text").get("").strip(), "rating_count": sel.css("div[ data-hook=total-review-count] ::text").get("").strip(), "feature_bullets": feature_bullets, "images": image_data, "variant_data": variant_data, }) sauf Exception as e : print("Erreur",e)

Ce script collecte un tableau de données produit, chaque produit étant représenté sous la forme d'un dictionnaire avec les clés suivantes :

  • name: Le nom du produit
  • price: Le prix du produit
  • stars: Le nombre d'étoiles du produit
  • rating_count: Le nombre total d'avis reçus par le produit
  • feature_bullets: Une liste des puces de fonctionnalités du produit
  • images: Une liste d'images haute résolution du produit
  • variant_data: Données sur les variantes du produit (par exemple, différentes couleurs ou tailles disponibles)

Il convient de noter que ce script est conçu pour extraire des données de pages de produits avec une mise en page spécifique. Si Amazon modifie la mise en page de ses pages de produits, le script devra peut-être être mis à jour【11†source】.

Considérations supplémentaires

Bien que les scripts ci-dessus fournissent un point de départ pour le scraping d'Amazon, il y a des considérations supplémentaires à prendre en compte pour une solution de scraping complète et robuste :

1. Gestion du contenu dynamique

Certaines pages de produits Amazon utilisent du contenu dynamique, qui nécessite JavaScript pour se charger. Si vous essayez de gratter ces pages avec les méthodes décrites ci-dessus, vous constaterez peut-être que certaines des données souhaitées sont manquantes. Dans ces cas, vous devrez utiliser un outil capable de rendre JavaScript, comme Selenium ou Puppeteer.

2. Respecter Robots.txt

Amazon's robots.txt Le fichier indique aux robots Web les pages qu'ils sont autorisés à visiter. Bien que ce fichier ne soit pas juridiquement contraignant, l'ignorer pourrait entraîner l'interdiction de votre adresse IP. Il est préférable de respecter le robots.txt fichier pour éviter tout problème potentiel.

3. Limitation de débit

Amazon peut limiter le nombre de demandes que vous pouvez effectuer au cours d'une certaine période. Si vous faites trop de demandes trop rapidement, Amazon pourrait bannir votre adresse IP, vous devrez peut-être proxys pour Amazon. Pour éviter cela, vous pouvez utiliser des techniques telles que la limitation de vos demandes ou rotation des adresses IP.

4. Considérations éthiques

Le scraping Web peut imposer une demande importante sur le serveur d'un site Web, il est donc important de scraper de manière responsable. Si vous pouvez obtenir les données dont vous avez besoin à partir de moins de pages, il est plus éthique de le faire. Par exemple, si vous n'avez besoin que des données produit de base (nom, prix, URL de l'image, note, nombre d'avis, etc.), vous pouvez extraire ces données des pages de recherche au lieu des pages produit, réduisant ainsi le nombre de demandes dont vous avez besoin pour faire par un facteur de 20.


En conclusion, bien que le grattage Web puisse être un outil puissant pour extraire des données de sites Web comme Amazon, il est important d'utiliser ces techniques de manière responsable et dans le respect des conditions d'utilisation du site Web et des demandes que vous placez sur ses serveurs.

Mots clés:

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *