Scrapping des sellers Amazon

Petit disclaimer pour les scrappers chevronnés :

Cet article est purement informatif. Avant de scrapper un site, n’oubliez pas de vérifier que les CGU l’autorisent, ou du moins ne l’interdisent pas 🙂

Ici j’utilise du C# pour réaliser mon bot, mais ce sera ultra simple à transposer dans votre language préféré.

Petite introduction sur le scrapping Amazon

Contrairement à certaines autres marketplace, Amazon ne fourni pas de listing “tout fait” de ses vendeurs.

“Mince, du coup on ne peut rien faire ?”

Heureusement si.

On va aller chercher ces vendeurs “à la main”.

L’objectif est de vous montrer ici que parfois il n’y a pas de recette magique, et qu’il faut mettre les mains dans le cambouis.

Mais si Amazon ne nous simplifie pas la tâche de ce côté là, ils semblent relativement permissif sur le scrapping. On ne va pas vous demander de remplir un captcha après 3 urls visitées, et le site ne semble pas renvoyer de fausses informations, même après plusieurs centaines (milliers ?) de requêtes à l’heure.

Quel niveau d’industrialisation ?

J’ai choisir ici de réaliser un scrapping de « niveau 2 », c’est à dire ni manuel, ni complètement industrialisé.

Les plus : rapide à mettre en place et permet de faire un volume correct.

Les moins : le scrapper peut ne plus marcher demain si le site fait des modifications.

Je vais ici réaliser un scrapper avec Selenium, qui va imiter un comportement utilisateur en ouvrant un navigateur internet et en réalisant les action à votre place sur ce vrai navigateur.

Ca consomme pas mal de ressources, mais comme vous êtes sur un Mac M1max, vous ne le sentirez pas passer.

Segmenter son scrapping

Pour les besoins de mon client, je vais segmenter mon scrapping par pays et par verticale.

Dans ce petit exemple ce sera Amazon.fr / les vendeurs d’anti-cerne.

Comprendre comment scrapper

Pour ça, pas de miracle. Il faut naviguer à la main sur le site pour en comprendre la mécanique.

Quand vous arrivez sur une page produit, vous avez deux possibilités :

  • le produit est vendu par Amazon
  • le produit est vendu par un tiers

Il y a également un encart qui apparaît de temps en temps avec les vendeurs « qui vendent aussi ce produit ».

L’idée va être de se rendre sur chaque page produit, et récupérer les urls de tous les vendeurs « non Amazon ».

Ensuite, il suffira de visiter l’url de chaque vendeur pour en récupérer les informations.

Développement du bot

Etape 1 : Récupérer l’url de la page à scrapper

Pour ça il suffit d’aller sur la page Amazon qui nous intéresse. Pour notre cas, l’url de la page qui liste les produits anti-cernes : https://www.amazon.fr/b?node=3365647031&ref=sr_nr_n_1

catégorie a scrapper sur amazon

Etape 2 : Fermer la popup de cookies.

Le truc ultra classique maintenant. La popup à un bouton d’acception avec un identifiant « sp-cc-accept ». Il suffit de demander à notre scrapper de cliquer dessus.

private static void ClosePopUp()
{
var lienRefusPopUp = driver.FindElement(By.Id("sp-cc-accept"));
lienRefusPopUp.Click();
Thread.Sleep(100);
}

Etape 3 : Scrapper les urls produit de la page de recherche

Récupérer l’ url de chaque produit. Il suffit de remarque que les produits ont tous la même class css « a-link-normal s-no-outline »

var products = driver.FindElements(By.CssSelector("a[class='a-link-normal s-no-outline']"));

scrapper les produits Amazon

Etape 4 : Aller à la page suivante

Aller à la page suivante et recommencer l’étape 3, autant de fois qu’il y a de pages 🙂

Pour aller à la page suivant je vais utiliser un XPath, juste pour vous montrer qu’il y a 1001 façon de faire. Pour info, vous pouvez utiliser une extension chrome ou firefox pour récupérer le Xpath d’un élément.

private static void GoToNextPage()
{
var buttonNext = driver.FindElement(By.XPath("//*[text()='Suivant']"));
buttonNext.Click();
Thread.Sleep(1500);
}

Etape 5 : Récupérer l’url du vendeurs

Se rendre sur chacune des url produit scrappée et récupérer les urls des vendeurs. L’url du vendeur à un id « sellerProfileTriggerId »

var seller = driver.FindElement(By.Id("sellerProfileTriggerId"));
sellerLink = seller.GetAttribute("href");

scrapper les url des sellers amazon

Etape 6 : Récupérer les urls des vendeurs associés

Là c’est un peu plus compliqué, car l’url apparait en popup quand on passe la souris sur les vendeurs associés.

Mais ce n’est pas impossible 🙂

Pour commencer on vérifie qu’il y a  des vendeurs qui vendent aussi ce produit en cherchant la popup d’id « mbc-popover-soldBy »

var otherSellers = driver.FindElements(By.CssSelector("span[id^='mbc-popover-soldBy']"));

Ensuite c’est un peu plus complexe :

Pour chaque vendeur, on va chercher le parent de l’élément, puis le deuxième enfant. Pour les plus courageux :

var valueParent = (otherSeller.FindElement(By.XPath("./..")));
var valueChildren = valueParent.FindElements(By.XPath("./child::*"));
var valueChildren2 = valueChildren[1];
var childrenLink = valueChildren2.GetAttribute("href");

Etape 7 : Récupérer les infos des vendeurs

La meilleure étape, mais aussi la plus simple. Aller sur chacune des url vendeur et récupérer toutes les infos qui nous intéresse.

private static Seller GetSellerInformations(Seller seller)
{
seller.Marque = (driver.FindElements(By.Id("sellerName")).Count != 0) ? driver.FindElement(By.Id("sellerName")).Text : string.Empty;
seller.CommercialName = GetInformationWithoutLibelle("Nom commercial:");
seller.RegistreDuCommerceNumber = GetInformationWithoutLibelle("Numéro de registre de commerce:");
seller.TvaNumber = GetInformationWithoutLibelle("Numéro TVA:");
seller.TelephoneNumber = GetInformationWithoutLibelle("Numéro de téléphone:");
seller.PostaleAdresse = GetInformationWithoutLibelle("Adresse commerciale:");
seller.Rating = GetRating();

return seller;
}

scrapping informations du vendeur sur Amazon

Etape 8 : exporter les résultat dans un CSV

J’ai mis CSV mais vous faites ce que vous voulez. Chez moi ça donne un truc du genre :

private static void ExportToCsv()
{
var sb = new StringBuilder();
foreach (var seller in sellersList)
{
sb.AppendLine(seller.CommercialName + "," + seller.Rating + "," + seller.SellerUrl + "," + seller.Marque + "," + seller.ProductUrl + "," + seller.PostaleAdresse
+ "," + seller.TelephoneNumber + "," + seller.RegistreDuCommerceNumber + "," + seller.TvaNumber);
}

File.WriteAllText("resultat.csv", sb.ToString());
}

Et ensuite ?

Ce scrapper semble fonctionner correctement pour des volumes relativement importants : (500 sellers scrappés par jour, sans proxy nécessaire). S’il tourne sur les machines de vos 15 sales ça fera déjà un beau volume à traiter…

La prochaine étape consiste à enrichir et scorer ces leads. Peut être le sujet du prochain article ?