Tuto : Scrapper un catalogue produit sur un site e-commerce

Hello,
merci pour le partage TOP, j’ai testé Dexi.io dans le même type, ça fonctionnait bien & on une offre 7 jours gratuit :slight_smile:
Webscrapper à l’air top, à tester c’est freemium ?

Bye

Hello @asoll

Yes c’est freemium. Ils ont des features payantes pour faire du scrapping automatique et scheduled.
Je ne connaissais pas Dexi.io je vais regarder thanks :slight_smile:

A+

1 J'aime

Merci @YanisTail pour cet excellent article.

J’ai tenté d’appliquer ta méthode pour récupérer les prix pratiqués par un hôtel. Je récupère un fichier vide.

Exemple :
Scrap des données de l’hotel l’Amiral à Nantes : https://www.google.fr/search?rlz=1C1CHBF_frFR808FR808&biw=1920&bih=937&ei=RS6eXIWwB4LRxgPb04nQCQ&q=hotel+amiral+nantes&oq=hotel+amiral+nantes&gs_l=psy-ab.3..0l4j0i22i30l5.5016.6741..6806...0.0..0.56.675.13…0…1…gws-wiz…0i71j0i131j0i10j0i22i10i30.rbOG386ad6k#trex=m_t:lcl_akp,rc_f:nav,rc_ludocids:1644838555693421869,rc_q:H%25C3%25B4tel%2520Amiral,ru_q:H%25C3%25B4tel%2520Amiral

Il faut se mettre en mode mobile pour voir apparaître les prix via l’extension UA Spoofer

Je récupère un fichier vide une fois WebScrapper paramétrée. Cela est-il du à une protection de Google ?

Hello @christohpe !

J’ai tenté moi aussi de récupérer les données de prix sur ton url. Malheureusement, je n’y suis pas arrivé :frowning:. On dirait que le roi des scrappeurs est difficile à scrapper ^^.
Essaye sur un autre comparateur de prix d’hôtels, tu auras peut-être plus de chance ! A dispo pour t’aider :).

A+
Yanis

Dommage… :sleepy: @scrapping_expert une idée ?

Je n’ai pas assez d’infos pour vous aider.
Les gars, pouvez vous me dire plus précisément à quelle étape vous bloquez, et donner l’export JSON de votre sitemap Webscraper?

Hello @ScrapingExpert !

Voici mon sitemap : {"_id":“amiral”,“startUrl”:[“https://www.google.fr/search?rlz=1C1CHBF_frFR808FR808&biw=1920&bih=937&ei=RS6eXIWwB4LRxgPb04nQCQ&q=hotel+amiral+nantes&oq=hotel+amiral+nantes&gs_l=psy-ab.3..0l4j0i22i30l5.5016.6741..6806...0.0..0.56.675.13…0…1…gws-wiz…0i71j0i131j0i10j0i22i10i30.rbOG386ad6k#lkt=LocalPoiHotelRates&trex=m_t:lcl_akp,rc_f:nav,rc_ludocids:1644838555693421869,rc_q:H%C3%B4tel%20Amiral,ru_q:H%C3%B4tel%20Amiral"],“selectors”:[{“id”:“click”,“type”:“SelectorPopupLink”,“parentSelectors”:["_root"],“selector”:“div.qceoWc”,“multiple”:false,“delay”:0},{“id”:“hotel”,“type”:“SelectorText”,“parentSelectors”:[“click”],“selector”:“div.I74ip”,“multiple”:true,“regex”:"",“delay”:0},{“id”:“price”,“type”:“SelectorText”,“parentSelectors”:[“click”],“selector”:"div.DkrUje:nth-of-type(n+2) div.TfzBfc”,“multiple”:true,“regex”:"",“delay”:0}]}

j’ai essayé de scrapper les hôtels et les prix sur cette pop-in :

Je ne sais pas si cela correspond à ce que veut faire @christohpe car il avait l’air de chercher plutôt les évolutions de prix dans le temps.
Mon scrap se base sur un un selectorpopuplink puis sur du scrap de type text. Malheureusement, je n’arrive pas à en tirer grand chose.

Webscraper lorsque tu le lances, ne reprend pas les paramètres par défaut de ton navigateur, en gros pas d’extensions activées, et du coup encore moins de User Agent spoofé. Pas moyen de se faire passer pour une app mobile avec je pense… Est ce le cas?

En tout cas pour ma part, je gérerais ce type de cas via du headless browser.

2 J'aimes

Oui, je te confirme que Webscrapper ne reprend pas les paramètres du navigateur. Je ne connaissais pas le headless browser. Est-ce que tu as des ressources à me conseiller sur ce sujet @scrapping_expert ?

J’avais rencontré des problèmes en essayant de scrapper des annonces sur Seloger. Mon scrap fonctionnait bien. En revanche, je n’arrivais pas à récupérer tous les résultats (une limite devait sans doute être atteinte).

Quelques ressources de type tutoriaux pour Chrome Headless (nodejs + Puppeteer):

2 J'aimes

Merci pour le tuto, par contre on est d’accord que cela ne fonctionne que pour les données affichées par le navigateur ? je ne peux pas aller chercher des balises html non affichées ?

Non, tu peux récupérer le contenu de n’importe quelle balise HTML qu’elle soit visible à l’écran ou pas :slight_smile:

Ah oui webscraper propose le type “html”, mais je n’arrive pas à comprendre comment lui indiquer l’élément html que je souhaite, et impossible de trouver d’autres tutos en français sur cet outil…

J’ai un input qui est “hidden” à récupérer, si quelqu’un a un bon lien pour comprendre comment faire ?

Je crois que je me suis trompé en postant le tuto Chrome Headless en date du 03 Avril dans ce sujet, j’aurais dû le mettre ailleurs… Sorry car ça prête à confusion !

Sinon @EwenK pour en revenir à ta question, pour indiquer à l’outil quel élément HTML tu veux cibler, il faut utiliser les sélecteurs (CSS ou XPath).

Dans le cas de Webscraper, il s’agit des sélecteurs CSS. Et pour ce qui est de cibler un input de type “hidden”, le sélecteur CSS correspondant est: input[type=hidden]

Si tu veux récupérer des données qui sont présentes dans des attributs des balises HTML (en l’occurrence des données “non affichées par le navigateur”), il faut spécifier à Webscraper le type de l’élément que tu cibles, c’est à dire “Element attribute”, puis lui indiquer le nom de l’attribut ciblé:

2 J'aimes

En effet mon premier post concernait le Tuto initial de Webscraper et non pas celui de Chrome Headless, mais j’irai le voir dans un second temps ceci dit.

Merci pour les explications, je vais creuser cela !

1 J'aime

Vraiment pratique ce webscraper.io

Je suis en train de creuser le type “Element click”, qui permet pour ceux que ça intéresse de cliquer sur un bouton pour récuperer des données qui par exemple nécessitent un appel Ajax, comme c’est souvent le cas pour les numéros de téléphone ou parfois pour afficher plus d’éléments (annonces, articles…)

Je fais donc cela :

  • type : “Element Click”
  • Click selector : je selectionne le bouton à cliquer
  • Click type : “Click once” (pour récupérer juste un numéro)
  • Click element uniqueness : Unique Text
  • Delay : “2000 ms” (pour temporiser le click)

Par contre j’ai une question, en plus du “Click Selector” il existe un “element Selector”. Je pensais intuitivement qu’il s’agissait de l’élément à récupérer une fois cliqué sur le bouton, j’ai donc sélectionné l’endroit où apparait mon téléphone, mais ça ne fonctionne pas. Quelqu’un a une idée ?

Sachant que j’ai de toute façon réussi à récupérer le télephone en ajoutant un autre selector après de type “Text” qui récupére le numéro de téléphone une fois cliqué dessus, mais ça m’intrigue de ne pas bien saisir le fonctionnement du Click Selector.

Le type “Element Selector” n’est pas fait pour indiquer un noeud HTML texte à extraire, mais il est utilisé pour grouper et cibler une même entité au sein de laquelle on va extraire plusieurs informations.

Par exemple, si il y a plusieurs lignes ou bloc avocats au sein d’une page, il faudra définir (ne pas faire attention au SelectorElementClick utilisé dans mon exemple):

  • le sélecteur pour chaque “bloc” avocat

Et là dans cette deuxième étape, dans WebScraper il faudra descendre d’un niveau, et définir un sélecteur par champ de données à extraire, relativement au sélecteur parent.

De telle sorte qu’on puisse obtenir un tableau final (ou CSV) tel que:

1 J'aime

OK, je n’avais pas envisagé cette possibilité, merci pour les explications, ça ouvre encore de belles possibilités ! Cet outil est vraiment sympa, et dire que je faisais tout en php avant :slight_smile:

Il faut juste l’envisager comme une alternative, il y a pas mal de limites:

  • ne gère pas les sites avec liens “dynamique” ou la balise “a” ne possède pas d’attribut href, mais où le comportement de ce dernier est géré par JavaScript
  • ne gère pas les sélecteurs XPath, alors que ces derniers permettent de cibler des nœuds / attributs / textes HTML de manière bien plus granulaire

Je ne suis pas tombé sur ces cas de figure pour l’instant, je l’ai testé avec succès sur des liens classiques gérés ou non par javascript sur pas mal de sites, je ne dois pas m’attaquer à des sites trop poussés pour l’instant pour tomber sur ces limites.