Dans ce tutoriel publié initialement par ScrapeHero, nous allons construire un scraper Amazon pour scraper les produits Amazon et obtenir les détails et les prix de ces produits. Nous allons construire ce simple Web Scraper en utilisant Python et SelectorLib et l’exécuter dans une console. Mais avant de commencer, voyons à quoi il peut vous servir.
Comment utiliser les données des produits Amazon?
- Scrapez les détails des produits que vous ne pouvez pas obtenir avec l’API de publicité des produits
Amazon fournit une API pour la publicité des produits, mais comme la plupart des autres « API », cette API ne fournit pas toutes les informations qu’Amazon possède sur une page de produit. Un scraper peut vous aider à extraire tous les détails affichés sur la page du produit. - Surveillez les produits pour détecter les changements de prix, de stock/disponibilité, de classement, etc.
En utilisant un web scraper, vous pouvez mettre à jour vos flux de données à instant régulier pour surveiller tout changements d’un produit. Ces flux de données peuvent vous aider à élaborer des stratégies de prix en examinant vos concurrents – autres vendeurs ou marques. - Analysez la manière dont une marque particulière se vend sur Amazon
Si vous êtes un détaillant, vous pouvez surveiller les produits de vos concurrents et voir s’ils se débrouillent bien sur le marché et procéder à des ajustements pour fixer le prix et vendre vos produits. Vous pourriez également l’utiliser pour surveiller votre canal de distribution afin d’identifier la manière dont vos produits sont vendus sur Amazon par les vendeurs, et si cela vous cause un quelconque préjudice. - Trouvez les avis des clients à partir des évaluations de produits Amazon
Les revues offrent une abondance d’informations. Si vous ciblez un groupe de vendeurs établis qui ont vendu des volumes raisonnables, vous pouvez extraire les avis sur leurs produits pour trouver ce que vous devriez éviter et ce que vous pourriez rapidement améliorer en essayant de vendre des produits similaires sur Amazon.
Finalement les possibilités d’utilisation des données des produits Amazon n’ont pas de limite…
Quelles sont les données que l’on peut extraire depuis Amazon ?
Ce tutoriel se limite à l’extraction des données suivantes (à partir d’une page de produit) :
- Nom du produit
- Catégorie
- Prix d’origine
- Prix de vente
- Disponibilité
Nous allons construire un scraper en Python qui pourra extraire les détails depuis l’URL de n’importe quel produit d’Amazon.
Configuration de votre machine pour le développement du web scraper
Pour commencer, vous avez besoin d’un ordinateur sur lequel Python 3 et PIP sont installés.
La plupart des systèmes d’exploitation UNIX comme Linux et Mac OS sont livrés avec Python pré-installé.
Si vous n’avez pas Python 3, commencez par l’installer.
Installation de Python
- Voici un guide pour installer Python 3 sur Linux – http://docs.python-guide.org/en/latest/starting/install3/linux/
- Les utilisateurs de Mac peuvent suivre ce guide – http://docs.python-guide.org/en/latest/starting/install3/osx/
- Les utilisateurs de Windows regarderont cette page – https://docs.python-guide.org/starting/install3/win/
Installation des paquets
Nous aurons besoin de quelques paquets. Vous trouverez ci-dessous les paquets requis :
- PIP pour installer les paquets suivants en Python (https://pip.pypa.io/en/stable/installing/ )
- Python Requests, pour faire des requêtes et télécharger le contenu HTML des pages.
- SelectorLib est un paquet python qui prendra un fichier YAML en entrée et analysera le HTML. (Pour savoir comment l’installer, voir – https://selectorlib.readthedocs.io/en/latest/installation.html)
Qu’est ce que SelectorLib ?
Selectorlib est une combinaison de deux paquets :
- Une extension chrome qui vous permet de baliser les données sur les sites web et d’exporter un fichier YAML avec.
- Une bibliothèque python qui lit ce fichier YAML et extrait les données que vous avez marquées sur la page.
Au lieu d’inspecter les éléments HTML et d’écrire XPath pour chaque donnée, nous allons utiliser le paquet Python SelectorLib et son extension chrome qui l’accompagne.
Création d’un fichier YAML
Nous allons créer le fichier YAML pour extraire les détails du produit à partir d’une page de produit.
Téléchargement et installation de SelectorLib
Après avoir téléchargé l’extension SelectorLib, ouvrez le navigateur Chrome et allez sur le lien du produit dont vous avez besoin pour marquer et extraire des données. Faites un clic droit n’importe où sur la page, allez dans « Inspecter » et la console des outils du développeur apparaîtra. Cliquez sur « Selectorlib ».
Création d’un modèle et ajout d’éléments
Sélectionnez « Créer un modèle » et donnez un nom au modèle. Nous avons nommé le modèle « amazon« .
Ensuite, nous ajouterons les détails du produit un par un. Sélectionnez un type et entrez le nom du sélecteur pour un élément. Sur le sélecteur, cliquez sur « Sélectionner un élément » et survolez la page. Cliquez lorsque l’élément dont vous avez besoin est sur-ligné en vert et appuyez sur « Enregistrer ». Le GIF ci-dessous montre comment ajouter des éléments.
Mise en évidence et aperçu des données
Une fois que vous avez créé le modèle, cliquez sur « Highlight » pour mettre en évidence et prévisualiser tous vos sélecteurs. Enfin, cliquez sur « Exporter » et téléchargez le fichier YAML.
Si vous souhaitez en savoir plus sur l’extension et sur la façon de baliser les données – https://selectorlib.com/getting-started.html
Voici à quoi ressemblera le fichier YML :
category: css: 'div.a-subheader ul.a-unordered-list' type: Text original_price: css: span.priceBlockStrikePriceString type: Text name: css: span.a-size-large type: Text sale_price: css: 'td.a-span12 span.a-size-medium' type: Text availability: css: 'div.feature div.a-section div.feature div.a-section div.a-section span.a-size-medium' type: Text
Code Python pour scraper les produits Amazon :
from selectorlib import Extractor import requests import json import argparse argparser = argparse.ArgumentParser() argparser.add_argument('url', help='Amazon Product Details URL') # Créer un extractor à partir de la elcture du fichier YAML e = Extractor.from_yaml_file('selectors.yml') user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' headers = {'User-Agent': user_agent} # Télécharger la page en utilisant requests args = argparser.parse_args() r = requests.get(args.url, headers=headers) # Passe le HTML de la page et créer data = e.extract(r.text) # Imprimer les données print(json.dumps(data, indent=True))
Exécuter le scraper
Exécutez le code complet en tapant le nom du script suivi d’un -h dans l’invite de commande ou le terminal :
usage: scraper.py [-h] url positional arguments: url Amazon Product Details URL optional arguments: -h, --help show this help message and exit
Voici la commande permettant d’extraire les détails du produit d’une URL :
python3 scraper.py https://www.amazon.com/YAMAZI-Polarized-Sunglasses-Fashion-Mirrored/dp/B07CSJPZM5/
Vous devriez voir un fichier JSON dans le même dossier que le script :
{ "category": "Clothing, Shoes & Jewelry › Girls › Accessories › Sunglasses" "originalprice": "$13.88" "name": "YAMAZI Kids Polarized Sunglasses Sports Fashion For Boys Girls Toddler Baby And Children" "saleprice": "$10.99" "availability": "In Stock." }
Que faire si vous tombez sur des captchas (bloquées) en scrapant
Nous ajoutons cette section supplémentaire pour parler de certaines méthodes que vous pourriez utiliser pour ne pas être bloqué en scrapant Amazon. Amazon est très susceptible de vous considérer comme un « BOT » si vous commencez à scraper des centaines de pages en utilisant le code ci-dessus.
La solution la plus simple est de NE PAS être marqué comme BOT.
Ok, comment faire ?
Imitez le plus possible le comportement humain.
Bien que nous ne puissions pas garantir que vous ne serez pas bloqué, nous pouvons partager quelques conseils et astuces sur la façon d’éviter les Captchas.
1. Utiliser des proxies et les faire tourner
Supposons que nous scrapions des centaines de produits sur amazon.com à partir d’un ordinateur portable — qui n’a généralement qu’une seule adresse IP. Amazon saura que nous sommes un bot en un rien de temps, car PERSONNE ne visiterait des centaines de produits en une minute. Pour ressembler davantage à un humain, faites des demandes à amazon.com par le biais d’un pool d’adresses IP ou de proxies. La règle de base ici est qu’un proxy ou une adresse IP ne doit pas faire plus de 5 requêtes à Amazon en une minute. Si nous scrapons environ 100 pages par minute, nous avons besoin d’environ 100/5 = 20 Proxies.
2. Spécifier les User Agents des derniers navigateurs et les faire tourner
Si vous regardez le code ci-dessus, vous verrez une ligne où nous avions fixé la chaîne de l’agent utilisateur pour la demande que nous faisons.
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'
Tout comme les proxies, il est toujours bon d’avoir un ensemble de chaînes d’agents utilisateurs. Assurez-vous simplement d’utiliser des chaînes de user-agent des navigateurs les plus récents et les plus populaires et faites tourner les chaînes pour chaque demande que vous faites à Amazon. C’est également une bonne idée de créer une combinaison de (User-Agent, Ip Address), de manière à ce qu’il ait l’air plus humain que « bot ».
3. Réduire le nombre d’ASIN à scraper par minute
Vous pouvez essayer de ralentir un peu la cadence, pour donner à Amazon moins de chances de vous signaler comme un bot. Vous n’avez pas besoin d’être trop lent. Mais environ 5 requêtes par IP par minute, ce n’est pas beaucoup. Si vous voulez aller plus vite, ajoutez des proxies. Vous pouvez modifier la vitesse en augmentant ou en diminuant le délai de la fonction de mise en veille de la ligne 18 du code ci-dessus.
try: # Recours en cas d'échec d'une demande for i in range(20): # Générer des retards aléatoires sleep(randint(1,3)) # Ajout de verify=False pour éviter les problèmes liés aux ssl
4. Réessayer, réessayer, réessayer
Lorsque vous êtes bloqué par Amazon, veillez à réessayer cette demande. Si vous regardez le bloc de code ci-dessus, nous avons ajouté 20 nouvelles tentatives. Vous pouvez faire encore mieux en créant une file d’attente de tentatives à l’aide d’une liste et en les réessayant après que tous les autres produits ont été retirés d’Amazon.
Comment scraper Amazon à plus grande échelle ?
Ce code devrait fonctionner pour les petits projets de scraping et vous permettre de vous lancer dans la construction de scrapers plus grands et plus performants. Toutefois, si vous souhaitez scraper des milliers de pages d’Amazon à intervalles rapprochés, voici quelques points importants à garder en tête :
1. Utiliser un framework de Web Scraping comme PySpider ou Scrapy
Lorsque vous parcourez un site aussi important qu’Amazon.com, vous devez prendre le temps de trouver comment faire fonctionner votre crawler de site en douceur. Choisissez un framework open-source pour construire votre scraper, comme Scrapy ou PySpider qui sont tous deux codés en Python. Ces frameworks ont des communautés assez actives et peuvent prendre en charge un grand nombre d’erreurs qui se produisent lors du scraping sans perturber l’ensemble du scraper. La plupart d’entre eux vous permettent également d’utiliser plusieurs threads pour accélérer le scraping – si vous utilisez un seul ordinateur. Scrapy peut être déployé sur vos propres serveurs en utilisant ScrapyD.
2. Si vous avez besoin de vitesse, distribuez et augmentez la taille en utilisant un cloud
Il y a une limite au nombre de pages que vous pouvez scraper lorsque vous utilisez un seul ordinateur. Si vous voulez scraper Amazon à grande échelle (des millions de pages de produits par jour), vous avez besoin de beaucoup de serveurs pour obtenir les données dans un délai raisonnable. Vous pouvez envisager d’héberger votre scraper dans le cloud et utiliser une version évolutive du framework – comme Scrapy Redis. Pour un crawl plus large, vous pouvez utiliser un broker de messages comme Redis, Rabbit MQ, Kafka, etc.
3. Utilisez un programmateur si vous devez faire fonctionner le scraper périodiquement
Si vous utilisez un scraper pour obtenir des prix ou des stocks de produits actualisés, vous devez mettre à jour vos données fréquemment pour suivre les changements. Si vous utilisez le script de ce tutoriel, utilisez CRON (sous UNIX) ou le planificateur de tâches sous Windows pour le programmer. Si vous utilisez Scrapy, scrapyd+cron peut vous aider à programmer vos spiders afin que vous puissiez actualiser les données rapidement.
4. Utiliser une base de données pour stocker les données scrapées d’Amazon
Si vous scrapez un grand nombre de produits d’Amazon, l’écriture des données dans un fichier deviendra vite peu commode. La récupération des données devient difficile et vous risquez même de vous retrouver avec du charabia indescriptible dans le fichier lorsque plusieurs processus écrivent dans un seul fichier. Il est recommandé d’utiliser une base de données même si vous scrapez à partir d’un seul ordinateur. MySQL convient parfaitement aux charges de travail modérées et vous pouvez utiliser des analyses simples sur les outils de données scrapées comme Tableau, PowerBI ou Metabase en les connectant à votre base de données. Pour les charges d’écriture plus importantes, vous pouvez consulter certaines bases de données NoSQL comme MongoDB, Cassandra, etc.
5. Utilisez les headers de requête, les proxies et la rotation des IP pour éviter d’obtenir des Captchas d’Amazon
Amazon a beaucoup de mesures anti-scraping. Si vous innondez Amazon, vous serez bloqué en un rien de temps et vous commencerez à voir des captchas au lieu de pages de produits. Pour éviter cela (dans une certaine mesure), en parcourant chaque page de produit Amazon, il est préférable de changer vos headers (en-têtes) en remplaçant votre valeur UserAgent pour faire croire que les requêtes proviennent d’un navigateur et non d’un script.
Si vous parcourez Amazon à très grande échelle, utilisez des Proxies et la rotation d’IP pour réduire le nombre de captchas que vous obtenez. Vous pouvez également utiliser Python pour résoudre certains captchas de base en utilisant un OCR appelé Tesseract.
6. Rédiger quelques tests simples de qualité des données
Les données scrapées sont toujours en désordre. Un XPath qui fonctionne pour une page peut ne pas fonctionner pour une autre variation de la même page sur le même site. Amazon dispose de BEAUCOUP de mises en page de produits. Si vous passez une heure à rédiger un contrôle de base de vos données – comme vérifier si le prix est une décimale, un titre une chaîne de moins de 250 caractères, etc. C’est un must si vous introduisez les données scrapées d’amazon dans un programme d’optimisation des prix.
J’espère que ce tutoriel vous a donné une meilleure idée sur la façon de scraper les sites d’e-commerce Amazon ou autres.
Pour acquérir les bases du scraping : rendez-vous sur cette page.
Avertissement : Tout code fourni dans ce tutoriel est uniquement destiné à des fins d’illustration et d’apprentissage. Nous ne sommes pas responsables de la manière dont il est utilisé et n’assumons aucune responsabilité pour toute utilisation préjudiciable du code source. La simple présence de ce code sur notre site n’implique pas que nous encouragions le scraping. Les tutoriels ne font qu’illustrer la technique de programmation des scrapers pour les sites Internet populaires.
Article adapté et inspiré par ScrapeHero : Comment scraper les produits et prix amazon avec Python ?