Comment scraper les offres de la Boutique de Noël sur Amazon.fr avec Python 3 et Requests

Arrêtez de copier le net. Scrapez le.

 

Comment scraper les offres de la Boutique de Noël sur Amazon.fr avec Python 3 et Requests

Noël approche, les cadeaux, les repas caloriques gourmands, les discussions de famille enflammées… et les superbes deals d’Amazon, sur leur boutique,  avec des offres promotionnelles spectaculaires. La magie de Noël, à l’américaine 🎅

amazon-noel-python-scraping-p04uio
god, the deals

Dans ce tutoriel, assez complexe il faut bien le reconnaître, nous allons récolter l’ensemble de ces données concernant les Offres de Noël sur Amazon.fr, en utilisant Python 3 (forcément), et la librairie Requests.

Quelles données allons-nous extraire ?

Il faut d’abord se rendre sur la page qui recense l’ensemble des deals d’Amazon. Attention, l’url est dynamique, avec un mystérieux paramètre node, qui change en permanence. C’est un paramètre il faudra donner en paramètre de notre script.

amazon-noel-python-scraping-p14uio

Pour se rendre sur la page, il faut suivre le chemin suivant : Amazon.fr > Parcourir les catégories > Boutique de Noël > Toutes nos idées cadeaux… En images, ci-dessous.

amazon-noel-python-scraping-p24uio

Une fois sur la page, nous allons étudier les requêtes qui sont échangées entre notre navigateur internet et Amazon. Il faut utiliser la fonction inspecter de notre navigateur : clic droit > inspecter > network. Ensuite rafraîchir la page avec Cmd + R.

Il faut également filtrer en ne sélectionnant que XHR, et en cochant la case Preserve log, ci-dessous illustré.

amazon-noel-python-scraping-p34uio

Enfin, en cliquant sur l’une des requêtes XHR avec GetDeals comme intitulé, puis sur réponse, nous voilà enfin arrivée à la source de la donnée que nous allons extraire massivement : un superbe fichier au format .json, que nous allons récupérer avec avidité 👶

amazon-noel-python-scraping-p44uio

Copions cette réponse, et collons là sur le site suivant : https://jsonformatter.curiousconcept.com/. La donnée est superbe.

amazon-noel-python-scraping-p54uio

Comment imiter avec Python3 et Requests la requête envoyée vers Amazon.fr ?

Si l’on se rent sur la partie Headers de la requête sélectionné plus haut, on se rend compte qu’il s’agit d’une requête POST, avec un paramètre nocache que nous examinerons plus tard. Jusque là, tout va bien.

amazon-noel-python-scraping-p64uio

Une requête POST, et une requête que mon navigateur va envoyer vers le serveur, assorti d’un Form Data, afin de recevoir des infos en retour. C’est d’ailleurs souvent comme ça que fonctionnent les API modernes. 

En scrollant donc vers le bas, on remarque que le Form Data ici envoyé contient des éléments intéressants, qu’il va nous falloir trouver afin de passer une requête valide : 

  • marketplaceID (1, rouge)
  • sessionID (2, rouge)
  • dealIDs (3, jaune)

La partie widget n’est pas nécessaire en réalité, elle est donc ici barrée en noir, et on va pouvoir s’en passer.

amazon-noel-python-scraping-p74uio

Pour trouver tous ces éléments, nous allons utiliser la fonction explorer de Google Chrome, en cherchant à chaque fois un élément dans le code source, afin de le récupérer manuellement, et de l’insérer dans notre requête.

amazon-noel-python-scraping-p84uio

marketplaceID

Nous allons d’abord nous attaquer au marketplaceID. Pour cela, nous copions, puis collons le marketplaceID de notre Form Data dans l’outil de recherche Network de notre navigateur : ici A13V1IB3VIYZZH.

Si l’item apparaît de nombreuses fois, il apparaît une fois de façon intéressante dans le corps de la réponse de la page centrale, ce qui va nous permettre de le récupérer.

amazon-noel-python-scraping-p94uio

Pour le récupérer, facile donc, en utilisant la Regex suivante :

sessionID

Pour la session ID, même méthode. Nous copions, puis collons la sessionID de notre Form Data dans l’outil de recherche Network de notre navigateur : ici le code barbare 262-0652194-0075563.

Ici, l’item apparaît dans les cookies de notre navigateur, une fois la première requête passée sur la page centrale.

amazon-noel-python-scraping-p067uio

Nous pouvons dès lors le récupérer directement depuis les cookies notre session requests, l’équivalent Python d’un navigateur.

dealIDs

Pour les dealIDs, ici encore, même méthode. Nous copions, puis collons un dealID prélevé depuis le Form Data : ici, pourquoi pas le 241ac8bf.

Et, une fois encore, les items apparaissent dans le corps de la réponse de notre première requête, vers la page centrale. 

amazon-noel-python-scraping-p017uio

Ici aussi, une Regex devrait nous donner l’avantage 🏄‍♂️

nocache (le mystérieux)

Enfin, un paramètre demeure mystérieux. Dans les requêtes POST, il s’agit du paramètre qui accompagne l’URL, et qui semble ne correspondre à rien : le nocache

Surtout, la valeur est dynamique dans le temps, et c’est ce comportement étrange qui nous donne déjà un chemin de réponse.

amazon-noel-python-scraping-p027uio

Pourtant, hormis le fait qu’il y ait uniquement des chiffres et que la valeur comporte 13 caractères, le nocache correspond en tout point à la valeur renvoyé par la fonction time.time() de Python 3.

amazon-noel-python-scraping-p037uio

Aussi, nous allons générer cette valeur avec le bout de code suivant : 

Le code

Le script est disponible ici : https://gist.github.com/Lobstrio/22d2d15723df7c478377d12376f60902.

Deals de Noël par milliers

Le script va donc réaliser les tâches suivantes : 

  • se lancer sur la page des deals
  • récupérer les paramètres pour le POST
  • POSTer en série

Pour exécuter le script, ouvrez votre éditeur Sublime Text 3, copier-coller le code ci contre, et enregistrez le sous le nom de amazon_xmas.py

Dans votre commande, placez ensuite la ligne suivante :

Vous pourrez ensuite observer directement depuis votre console, le résultat suivant :

amazon-noel-python-scraping-p047uio

La page centrale offre 300 deals IDs, ce seront 300 lignes remplies sur le .csv présent sur votre bureau. Une fois le fichier ouvert, nous avons de superbes données, directement exploitable depuis la feuille de calcul.

amazon-noel-python-scraping-p057uio

Limitations connues

Le script permet de récolter les 300 premiers deals de Noël sur Amazon, avec un set de données vaste et directement exploitable. Toutefois, impossible avec cet outil d’extraire les milliers de deals que proposent le site web chaque jour. 

Surtout, passé un premier volume d’extraction, le site va soit vous imposer des Captchas, soit bannir votre adresse IP

Si vous avez besoin d’aide pour scraper des milliers de données de façon récurrente et à grande échelle, ou si ces sets de données vous intéressent afin de mener à bien vos recherches, vous pouvez nous contacter juste là :

Avertissement: Tout code fourni dans nos tutoriels est destiné à des fins d’illustration et d’apprentissage uniquement. Nous ne sommes pas responsables de la façon 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 encourageons le scraping ou l’extraction de données des sites référencés dans le code et le tutoriel qui l’accompagne. Les tutoriels ne font qu’illustrer la technique de programmation des scrapers web pour les sites internet populaires. Nous ne sommes pas obligés de fournir un support pour le code, cependant, si vous ajoutez vos questions dans la section des commentaires, nous pouvons vous y répondre périodiquement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *