Problème Element scroll down avec web Scraper

Bonjour, j’essaie depuis plusieurs jours de scraper la page d’un site : https://www.irmawork.com/annuaire/recherche?q=&cible=organizations

J’ai donc crée un premier id dans web Scraper avec le type : Element scroll down avec une tempo de 3000 j’ai même essayé avec plus mais rien n’y fait. puis à l’intérieur les autres id avec les bon selector.
J’arrive bien à extraire les données dont j’ai besoins mais même lorsque je vois que ça scroll vers le bas rien n’est extrait dans les nouvelle données qui s’affichent, et du coup le scraping s’arrête. Par contre si je descend à la main là les données sont extraites. En gros ça n’extrait que ce qui est visible ce qui en même temps paraît logique. Quelqu’un pourrais me dire ce que je loupe ? Bon j’ai une solution au cas ou il y a 28000 contact je descend à la main jusqu’en bas et je lance le scraping mais ça va me prendre 1 h :slight_smile:
Merci d’avance pour votre aide

Sinon tu peux utiliser le sitemap :

Je t’ai cleané l’xml avec uniquement les urls :

:wink:

2 « J'aime »

Cool merci c’est sypa, mais j’aimerais vraiment comprendre pourquoi ça scroll mais ne gratte pas sur webscraper :slight_smile: pour voir ou j’ai commis une erreur et pouvoir y remédier dans le futur. En tout cas merci pour ça :wink:

giphy
« Je veux insinuer que vous n’avez pas de connaissances suffisantes pour faire des crêpes. Alors vous imaginer en train de bricoler des plaques de dissimulation, c’est à pisser de rire. »
(Désolé j’étais obligé à cause de ta photo de profil…)

J’utilise pas trop web scraper, @ScrapingExpert pourra surement répondre à ta question sur le scroll. Une chose est sur c’est que chaque site est différent et web scraper ne pourra pas s’adapter a tous les sites, c’est pour ça qu’il y a autant de technique de scraping que de type de site différent.

N’hésite pas à regarder la catégorie « scraping » de La toolbox du growth hacker 💎

Super en tout cas merci pour tes réponse, et oui effectivement je suis en plein apprentissage du coup il va me falloir du temps mais c’est en faisant des enchantements qu’on devient enchanteur non ? :slight_smile:

1 « J'aime »

Hello @merlin,
Tu aurais l’export JSON de ton « sitemap » ? et un screenshot de la liste de tes sélecteurs au niveau root, et/ou screenshot du Selectors graph?
A tout hasard, ton Element scroll down n’est pas le 1er sélecteur écrit ? Il est en quelle position ?

Bonjour, je vais mettre le sitemap au propre et je te l’envoie. Oui le scroll down est le premier selector écrit il ne faudrait pas ?

@merlin

Pour ta demande… en 2 minutes top chrono sur Google Sheets:
https://docs.google.com/spreadsheets/d/1SpyjPC7ahdVsko04ou5vTsePbYuqDKAhliq90ESaNKU/copy

J’utilise mon add-on ImportJSON qui va chercher les infos directement de l’API du site. Pas de scraping, donc c’est beaucoup plus fiable!

L’add-on est dispo ici https://gsuite.google.com/marketplace/app/importjson_beta_json_to_table_from_any_s/782573720506

1 « J'aime »

Hello, merci @Mapi , je vais m’y intéresser ça à l’air effectivement super. J’ai tout de même 2 questions . Lorsque ça charge au bout de quelques secondes ça plante avec #NOM? et un message d’erreur fonction inconnue IMPORTJSON. et plus rien ne charge.
Egalement le but sur le site est d’aller également dans chaque fiches pour aller y collecter les informations est ce faisable également ?
Je vais explorer le json mais je vais quand même persévérer sur Web scraper pour comprendre ce que j’ai foiré :slight_smile:

Bonjour @ScrapingExpert voici le sitemap, il n’est pas complet c’est juste pour donner une idée du truc. Pas complet parce que plus complexe que ce que j’ai fait, en effet les fiches ne sont pas toutes les mêmes selon l’activité mais en gros voilà .

{
   "_id":"irmawork",
   "startUrl":[
      "https://www.irmawork.com/annuaire/recherche?q=&cible=organizations"
   ],
   "selectors":[
      {
         "id":"ELEMENT",
         "type":"SelectorElementScroll",
         "parentSelectors":[
            "_root"
         ],
         "selector":"li.jss233",
         "multiple":true,
         "delay":"3000"
      },
      {
         "id":"NOM",
         "type":"SelectorText",
         "parentSelectors":[
            "ELEMENT"
         ],
         "selector":"h6",
         "multiple":false,
         "regex":"",
         "delay":0
      },
      {
         "id":"Nombre d'activité",
         "type":"SelectorText",
         "parentSelectors":[
            "ELEMENT"
         ],
         "selector":"span.jss374",
         "multiple":false,
         "regex":"",
         "delay":0
      },
      {
         "id":"Domaine",
         "type":"SelectorText",
         "parentSelectors":[
            "ELEMENT"
         ],
         "selector":".jss179 span:nth-of-type(1)",
         "multiple":false,
         "regex":"[^Domaine: ].+",
         "delay":0
      },
      {
         "id":"Localisation",
         "type":"SelectorText",
         "parentSelectors":[
            "ELEMENT"
         ],
         "selector":"span.jss75:nth-of-type(2)",
         "multiple":false,
         "regex":"[^Localisation: ].+",
         "delay":0
      },
      {
         "id":"PLUS",
         "type":"SelectorLink",
         "parentSelectors":[
            "ELEMENT"
         ],
         "selector":"a",
         "multiple":false,
         "delay":0
      },
      {
         "id":"Activité",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"div.jss404:nth-of-type(1) h5",
         "multiple":false,
         "regex":"",
         "delay":0
      },
      {
         "id":"Genre(s) musical(aux)",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"div.jss404:nth-of-type(1) p:nth-of-type(1)",
         "multiple":false,
         "regex":"[^Genre(s) musical(aux) : ].+",
         "delay":0
      },
      {
         "id":"Manager",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"p:nth-of-type(2)",
         "multiple":false,
         "regex":"[^Manager : ].+",
         "delay":0
      },
      {
         "id":"Tourneur",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"p:nth-of-type(3)",
         "multiple":false,
         "regex":"[^Tourneur : ].+",
         "delay":0
      },
      {
         "id":"Editeur",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"p:nth-of-type(4)",
         "multiple":false,
         "regex":"[^Éditeur : ].+",
         "delay":0
      },
      {
         "id":"Maison de disques",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"p:nth-of-type(5)",
         "multiple":false,
         "regex":"[^Maison de disques : ].+",
         "delay":0
      },
      {
         "id":"Promotion",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"p:nth-of-type(6)",
         "multiple":false,
         "regex":"[^Promotion : ].+",
         "delay":0
      },
      {
         "id":"Distinction et récompenses",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"p:nth-of-type(7)",
         "multiple":false,
         "regex":"[^Distinctions et récompenses : ].+",
         "delay":0
      },
      {
         "id":"Mise à jour",
         "type":"SelectorText",
         "parentSelectors":[
            "PLUS"
         ],
         "selector":"div:nth-of-type(5) p",
         "multiple":false,
         "regex":".+[^ - ©2019 Irma, tous droits réservés.]",
         "delay":0
      }
   ]
}

Et voici le screeshot du selector graph
GRAPH

Hello,

Rapide remarque concernant ton sélecteur CSS, utilisé pour spécifier l’élément à activer pour le scroll down.

Tu utilises li.jss233 , or ce sélecteur ne correspond en rien à l’élément sur lequel faire un scroll down puisqu’il match les 10 x élements de type li.

image

Pourquoi ne pas spécifier un sélecteur qui vienne matcher le dernier li uniquement? Via la syntaxe :last-child

Par ailleurs, je ne suis même pas certain qu’en mettant le focus sur le dernier li, cela déclenche l’automatic scroll down.

J’ai fais quelques tests, je préconise de faire un scroll down sur div[role=progressbar], ainsi que testé dans la console:

$("div[role=progressbar]").scrollIntoView(true)

Hello désolé je suis un peu perdu, concrètement je dois place [role=progressbar] comme selector sur mon élément scroll down ?

Hello,

Non pas de soucis j’étais moi même perdu, et j’ai fais une erreur dans ma réponse.

En réalité, le sélecteur CSS qu’on doit indiquer dans le Element scroll down n’est pas le sélecteur visant l’élément sur lequel on doit scroll down, mais le sélecteur qui vise les éléments à extraire, sous entendu le Element scroll down est censé gérer le scroll down en bas de la page automatiquement.

Sauf que voilà, ça ne marche pas. Le scroll down est hyper bugué, et n’est pas capable de scroller en bas tout seul.

Après avoir parcouru pas mal de sites/forum, il apparaît que cette feature ne soit absolument pas au point…exemple: How to Scrape Data That Appears on scroll - How to? - Web Scraper

C’est une des raisons pour lesquelles je préfère largement coder mon propre bot dans un context web browser + Javascript, WebScraper mériterait qu’on le réécrive entièrement :slight_smile:

Ok merci, d’un côté cela me rassure ce n’est pas moi qui faisait une boulette et d’un autre ça m’embête car j’aime bien Webscraper. Mais je vais donc chercher à faire mon propre bot :slight_smile:
Merci en tout cas

Tu peux rapidement extraire la liste des liens de toutes les boites, en faisant un script en JavaScript dans ta console, en utilisant Promises + setTimeout() + element.scrollIntoView().

Ensuite, tu utilises cette liste d’urls pour en faire ton point de départ du scénario de WebScraper :slight_smile:

merci, je vais regarder ça

Bonjour @merlin,
Un bug de Google apparu il y a quelques jours. Il semble qu’avec la crise actuelle ils soient un peu lent à la réaction.
Par contre il suffit de recharger la feuille de calcul et aller dans le menu > Add-ons > ImportJSON > Activate

(Dorénavant un message explique la procédure après l’installation)