2 points par GN⁺ 2024-08-07 | 1 commentaires | Partager sur WhatsApp

Suivre les prix des supermarchés

  • En décembre 2022, un site web a été créé pour suivre les variations de prix de trois grandes chaînes de supermarchés en Grèce.
  • Ce processus a nécessité de résoudre plusieurs problèmes et a permis d’en tirer de nombreux enseignements.

Scraping de sites JavaScript

  • Le principal problème venait des sites web rendus en JavaScript.
  • Playwright a été utilisé pour contrôler un navigateur web de manière programmatique.
  • Playwright prend en charge les navigateurs Chromium, Safari et Firefox, et peut être utilisé avec Node, Java, .NET et Python.
  • Du code a été écrit pour gérer le défilement infini et extraire les informations produit.

Automatisation

  • Sur un MacBook Pro M1, il fallait entre 50 minutes et 2 h 30 pour scraper l’ensemble des supermarchés.
  • C’était bien pour le développement et les tests, mais une solution plus pérenne était nécessaire.

Utiliser un vieil ordinateur portable ?

  • Un ancien ordinateur portable de 2013 a été essayé, mais les performances se sont révélées très décevantes.

Utiliser le cloud ?

  • AWS était trop cher, et Hetzner était bien moins coûteux.
  • La décision a été prise d’utiliser un serveur Hetzner.

Utiliser à la fois un vieil ordinateur portable et le cloud !

  • Le scraping a été automatisé sur un serveur cloud, et l’ancien ordinateur portable a servi de serveur CI.
  • Un pipeline a été configuré avec Concourse pour exécuter le scraping chaque jour.

Contourner les restrictions d’IP

  • À cause des règles de pare-feu Akamai, les requêtes provenant d’adresses IP non résidentielles étaient bloquées.
  • Tailscale a été utilisé pour faire apparaître les requêtes comme provenant de l’adresse IP du domicile.

Causes et moment des échecs

  • Un projet de scraping est affecté par le travail des développeurs du site web.
  • Deux types d’échec : les breaking changes et les changements non bloquants.
  • Il est important d’obtenir rapidement du feedback.

Optimisation

  • Divers travaux d’optimisation ont été menés, notamment des alertes par e-mail, l’hystérésis, des timeouts et des paramètres de retry.
  • Les performances ont été améliorées en utilisant un serveur plus puissant et en réduisant les fetches de données.

Coûts

  • Le coût d’utilisation d’un serveur chez Hetzner était très faible.
  • Le free tier de Cloudflare R2 a permis de réduire les coûts de stockage des données.

Conclusion

  • Les principaux composants d’un pipeline de scraping destiné à suivre les variations de prix dans les supermarchés sont présentés.

Résumé de GN⁺

  • Cet article partage un retour d’expérience sur l’utilisation de Playwright et de services cloud pour suivre les variations de prix dans les supermarchés.
  • Il explique comment scraper des sites web rendus en JavaScript, ainsi que les méthodes d’automatisation et d’optimisation.
  • Il décrit comment réduire les coûts et contourner les restrictions d’IP à l’aide de Hetzner et Tailscale.
  • Cet article peut être utile aux personnes intéressées par le web scraping et l’automatisation.

1 commentaires

 
GN⁺ 2024-08-07
Avis Hacker News
  • Partage d’expérience sur des problèmes similaires

    • Exploitation d’un site de comparaison de prix de lentilles dans 30 pays
    • Les changements de HTML des sites web constituent un problème majeur
    • L’appariement des produits sur plus de 100 sites web a été le principal obstacle initial
    • La plupart des cas peuvent être traités avec des expressions régulières, mais un mapping manuel reste nécessaire
    • Construire le scraper et l’infrastructure est plutôt facile, la maintenance est difficile
    • Quand un produit disparaît, il est difficile d’identifier la cause de l’erreur
    • C’est un projet intéressant, mais il faut résoudre des problèmes pénibles et complexes
  • Projet similaire en cours en Nouvelle-Zélande

    • Utilisation de Playwright et TypeScript, avec stockage de fichiers Parquet dans le cloud
    • Les données sont seulement collectées pour l’instant et ne sont pas encore affichées
    • Le principal travail consiste à contourner des services de reverse proxy comme Akamai et Cloudflare
    • En Nouvelle-Zélande, au moins trois startups font le même travail
    • L’inflation stimule beaucoup d’innovation
    • Observation de schémas par lesquels les supermarchés rendent les prix complexes
  • Création d’un site similaire qui a suscité beaucoup d’intérêt

    • Utilisation d’un serveur Linode avec 2 Go de RAM, 5 IPv4 et 1000 IPv6
    • Scraping de tous les produits à des intervalles pouvant aller jusqu’à 40 minutes
    • Utilisation de curl impersonate et de scraping JSON
    • 90 % du marché fournit les prix via des appels Ajax, les 10 % restants sont traités avec des expressions régulières
    • Site web : economizafloripa.com.br
  • Possibilité de monopole des deux principales chaînes de supermarchés australiennes via des algorithmes d’IA d’analyse des prix

    • Les algorithmes d’IA pourraient coopérer pour maximiser les profits
    • Cela pourrait se faire légalement via des données publiques sur les prix, ou illégalement en partageant les coûts d’approvisionnement ou les marges par produit
    • Les consommateurs finiraient par payer des profits maximisés
  • Actif sur le marché suédois depuis plus de 8 ans

    • Site web : matspar.se
    • Les clients peuvent comparer les produits de toutes les principales boutiques en ligne et les ajouter à leur panier
    • Après comparaison du prix total, il est possible d’exporter le panier vers la boutique souhaitée
    • Plus de 30 millions de prix sont scrapés chaque jour
  • Avec plus de transparence sur les prix, le suivi serait plus facile

    • Exemple : comparer le prix du lait d’avoine selon différents codes postaux et magasins d’alimentation
    • Possibilité de suivre la « shrinkflation » (moins de quantité pour le même prix)
    • Il faut vérifier non seulement le prix, mais aussi le coût au gramme
  • Comment faire des changements sans faire échouer le scraper

    • Il serait possible d’ajouter des contrôles automatiques pour éviter des variations de prix anormales
    • Exemple : empêcher qu’un prix varie de plus de 100 %, ou que le nombre de produits actifs change de plus de 20 %
  • Partage d’une expérience de suivi des prix lors d’un déménagement dans une nouvelle région

    • Il est plus facile de faire ses courses à bas prix dans deux marchés ou grandes enseignes
    • Europe : Aldi/Lidl, États-Unis : Costco/Trader Joe's
    • En ligne : CamelCamelCamel/Amazon
    • Acheter directement auprès du fabricant peut être moins cher
  • Le plus difficile n’est plus le scraping, mais le contournement de blocages de plus en plus sophistiqués

    • Il faut faire tourner en permanence des proxys résidentiels et éviter les schémas de scraping de données
    • Certains supermarchés masquent les requêtes réseau
    • Même l’inspection des requêtes réseau et des données dans les applications mobiles est bloquée
    • À cause du coût et du travail de développement continu, cela a été jugé sans intérêt
  • Problème du rendu côté client en JavaScript

    • Ironiquement, les données qui remplissent le site sont fournies dans un format JSON simple, ce qui rend le scraping plus fiable