Scraping du site Mac Donalds


#1

Bonjour à tous,

Voilà ma situation :
Je souhaite extraire du site https://www.restaurants.mcdonalds.fr la liste sur un tableur des noms-adresse-téléphone de tout les Mac Do en France.

Quand tout est sur une page je m’en sors avec un tableur, ici la difficulté c’est qu’il faut cliquer sur les différentes pages à chaque fois.

J’ai regardé plusieurs tuto, plusieurs sujet sur le forum mais je n’y comprends rien je m’y perds.

Pouvez vous m’expliquez, comment je peux utiliser un truc qui peut me faire ça (à savoir que je vais en avoir aussi besoin pour le site d’autres chaines de magasin)

Je suis débutant !

Merci :wink:


#2

A priori, je ne vois pas d’autre solutions que savoir coder, et savoir faire un peu de “reverse engineering”.

En ouvrant la console de Chrome dans le Developer Tools (Outils de Développement), en se positionnant sur l’onglet XHR, après avoir chargé la page dont tu as donné l’URL, voici ce qu’on peut observer:

Ici, on voit qu’une requête d’API a été envoyée, dont voici l’URL:

https://prod-dot-mcdonaldsfrance-storelocator.appspot.com/api/store/nearest?center=6.1888762:48.697169599999995&dist=30000&limit=20&authToken=26938DBF9169A7F39C92BDCF1BA7A&db=prod

Les paramètres passés à l’API sont ici:

  1. center: 6.1888762:48.697169599999995
  2. dist: 30000
  3. limit: 20
  4. authToken: 26938DBF9169A7F39C92BDCF1BA7A
  5. db: prod

Ceux sur lesquels on peut jouer sont: center, dist, limit

En faisant varier les coordonnées géographiques du centre de le carte (paramètre center ayant pour valeur latitude:longitude, la distance depuis ce centre (paramètre center), et la limite max. de restaurants désirés dans ce cercle (paramètre limit), on peut obtenir l’intégralité des données de tous les restaurants de France.

Les donnée qu’on obtient via l’API:

En version code JSON textuel :

{
  "datasheet": {
    "fax": {
      "number": ""
    },
    "tel": {
      "number": "0383415715"
    },
    "web": "/mcdonalds-neuves-maisons"
  },
  "db": "prod",
  "encoded_name": "NEUVES-MAISONS",
  "id": "1508",
  "lg": "fra",
  "location": {
    "city": "NEUVES-MAISONS",
    "coords": {
      "lat": 48.6154747,
      "lon": 6.09273600000006
    },
    "countryISO": "FRA",
    "countryOfficial": "F",
    "formattedAddressLine": "1011 rue pasteur",
    "formattedCityLine": "F - 54230 NEUVES-MAISONS",
    "postalCode": "54230",
    "streetLabel": "1011 rue pasteur"
  },
  "name": "NEUVES-MAISONS"
}

#3

Plus simple:

Tout en bas tu as ‘afficher les pages par départements ou ville’

Tu devrais ensuite pouvoir tout scraper à partir de là avec l’extension Chrome webscraper.io


#4

Bonjour,
je suis expert big data, il ya des outils gratuits type scrapy pour faire ca:
https://doc.scrapy.org/en/latest/intro/tutorial.html#creating-a-project.

Ce n’est pas très compliqué de suivre le tutoriel, sinon faites appel à quelqu’un pour faire le bout de code.


#5

En quoi c’est plus simple que la méthode que j’ai proposé?

J’ai donné une seule requête, dans laquelle il suffit de spécifier les bons paramètre pour TOUT extraire en une fois.

Plus facile que passer par la configuration d’un outil comme Webscraper.io, qui demande une courbe d’apprentissage loin d’être négligeable, et des connaissances en sélecteur CSS…


#6

Ah oui effectivement s’il suffit de mettre les bons paramètres pour tout extraire en une fois…dis comme ca ta solution est la plus simple! Elle n’est juste pas présentée simplement et parait compliquée pour moi à première vue et j’imagine aussi pour je cite ‘un débutant’ qui ‘n’y comprends rien et se perds’. Reste à savoir call une API et traiter un JSON. @Julien_Perez1 ?


#7

Si tu veux, ce que je n’ai pas trop apprécié dans la démarche de ton message, c’est que tu lâches juste un “Plus simple”, sans aucune explications, sans pédagogie ligne par ligne (chose que j’ai faite pour la solution que j’ai suggéré).

Tu dis juste qu’on pourrait tout scraper avec WebScraper, mais sans rentrer dans aucun détail, alors que cette extension n’est vraiment pas facile à prendre en main (nécessite connaissance des sélecteurs CSS et de l’arborescence du DOM HTML).

C’est sûr que c’est simple de répondre juste “Plus simple, utiliser ça”, sans détails, que moi qui détail tout… :sweat_smile::sweat_smile:

Par contre Matthieu, si tu maîtrises bien l’extension WebScraper, un petit tuto serait apprécié, et je serais le premier preneur (sérieusement), tant j’ai encore du mal avec ce tool !


#8

bon ok, c’est vrai que c’était un peu ‘sec’ comme réponse, désolé. Je dis ‘simple’ parce qu’au final t’as besoin de Chrome, de cliquer sur ce que tu veux scrape et de lancer (Ok, presque)
Je trouve webscraper tellement simple comparé aux les autres solutions qui sont d’habitudes proposées (genre import.io j’ai jamais réussi à sortir un truc je crois bien) que j’ai fait ce à quoi je m’opposais…présenter une solution sans plus d’explication.
J’ai beaucoup utilisé cette extension, je me suis appuyé sur un tuto sur Youtube en Fr pour commencer, et ensuite sur le forum. Mais j’avoue que j’y vais souvent à taton. J’ai pas vraiment de connaissance en selecteur CSS ou DOM HTML, je tatonne jusqu’à trouver le bon réglage. Dans 90% des cas j’arrive à scraper ce que je veux.


#9

J’admets que import.io… je partage ton avis !

Aujourd’hui, avec les étudiants que j’ai en formation (on fait une session Code for Growth chez HumindSchool), on est tombé sur un site qui pourrait être traité à priori avec WebScraper io, sauf que le site en question possède quelques caractéristiques qui rendent le tool inutilisable (voir usine digitale, rubrique annuaire).

La pagination possède un bouton “Page suivante”, tant qu’on est sur les chiffres qui se terminent par 0-8, mais systématiquement quand on passe à la page 9, ce bouton Page suivante disparait , et on doit cliquer sur le bouton de la page des dizaines suivantes. Ce qui complexifie énormément la logique.

En résumé, ici seul XPath pourrait faire l’affaire, or WebScraper ne fonctionne qu’avec les sélecteurs CSS…


#10

Effectivement ca a pas l’air facile. Si ca tourne sur les pages 0 à 8 et que ca ne bloque qu’une fois arriver à 9 alors tu pourrais créer 2 sitemaps différents avec le deuxième qui a comme point de départ la page 9 et configuré pour le bouton ‘page Suivante’.
Si ca bloque alors je ne vois pas comment faire


#11

Sauf que créer 2 sitemaps revient à dire on créé deux scénarios différents, n’ayant aucuns liens entre eux, donc impossible de cliquer sur la page 10 à partir de la page 9, vu qu’il faudrait partir de l’état du navigateur tel que lancé par le scénario 1, pour aller vers le scénario 2…

Pour faire simple: on atteint vite les limites de WebScraper.

Puppeteer avec Nodejs font parfaitement l’affaire dans un tel cas :slight_smile:


Team : CamilleBriceJulienVivianBorisXavierSteven.