2 Punkte von GN⁺ 2024-08-07 | 1 Kommentare | Auf WhatsApp teilen

Supermarktpreise verfolgen

  • Im Dezember 2022 wurde eine Website aufgebaut, um Preisänderungen bei drei großen Supermärkten in Griechenland zu verfolgen.
  • Dabei mussten verschiedene Probleme gelöst werden, und es wurden viele Lektionen gelernt.

Scraping von JS-Websites

  • Das Hauptproblem waren Websites, die mit JavaScript gerendert werden.
  • Mit Playwright wurde ein Webbrowser programmatisch gesteuert.
  • Playwright unterstützt Chromium-, Safari- und Firefox-Browser und kann mit Node, Java, .NET und Python verwendet werden.
  • Es wurde Code geschrieben, um Infinite Scroll zu verarbeiten und Produktinformationen zu extrahieren.

Automatisierung

  • Auf einem M1 MacBook Pro dauerte das Scraping eines kompletten Supermarkts zwischen 50 Minuten und 2 Stunden 30 Minuten.
  • Für Entwicklung und Tests war das gut, aber es wurde eine dauerhaftere Lösung benötigt.

Einen alten Laptop verwenden?

  • Es wurde versucht, einen alten Laptop aus dem Jahr 2013 zu verwenden, aber die Leistung war sehr enttäuschend.

Die Cloud nutzen?

  • AWS war zu teuer, und Hetzner war deutlich günstiger.
  • Es wurde beschlossen, Server von Hetzner zu verwenden.

Alten Laptop und Cloud nutzen!

  • Das Scraping wurde auf einem Cloud-Server automatisiert, und der alte Laptop wurde als CI-Server verwendet.
  • Mit Concourse wurde eine Pipeline eingerichtet, die die Scraping-Jobs täglich ausführt.

IP-Beschränkungen umgehen

  • Wegen Firewall-Regeln von Akamai wurden Anfragen von nicht-residentiellen IP-Adressen blockiert.
  • Mit Tailscale wurde erreicht, dass die Anfragen so aussehen, als kämen sie von der heimischen IP-Adresse.

Warum und wann etwas fehlschlägt

  • Scraping-Projekte werden von Website-Entwicklern beeinflusst.
  • Es gibt zwei Arten von Fehlern: Breaking Changes und Non-Breaking Changes.
  • Wichtig ist, schnell Feedback zu bekommen.

Optimierung

  • Es wurden verschiedene Optimierungen vorgenommen, darunter E-Mail-Benachrichtigungen, Hysterese, Timeouts und Retry-Einstellungen.
  • Durch den Einsatz eines größeren Servers und weniger Data Fetches wurde die Performance verbessert.

Kosten

  • Die Kosten für die Servernutzung bei Hetzner waren sehr niedrig.
  • Mit dem kostenlosen Tarif von Cloudflare R2 wurden die Kosten für die Datenspeicherung gesenkt.

Fazit

  • Es werden die wichtigsten Bausteine zum Aufbau einer Scraping-Pipeline beschrieben, um Preisänderungen in Supermärkten zu verfolgen.

Zusammenfassung von GN⁺

  • Der Beitrag teilt Erfahrungen mit dem Einsatz von Playwright und Cloud-Diensten, um Preisänderungen in Supermärkten zu verfolgen.
  • Er behandelt, wie sich mit JavaScript gerenderte Websites scrapen sowie Automatisierung und Optimierung umsetzen lassen.
  • Es wird erklärt, wie sich mit Hetzner und Tailscale Kosten senken und IP-Beschränkungen umgehen lassen.
  • Der Artikel kann für Menschen nützlich sein, die sich für Web Scraping und Automatisierung interessieren.

1 Kommentare

 
GN⁺ 2024-08-07
Hacker-News-Kommentare
  • Erfahrung mit einem ähnlichen Problem geteilt

    • Betreibt eine Website zum Vergleich von Linsenpreisen in 30 Ländern
    • Änderungen am HTML der Websites sind das große Problem
    • Das Produkt-Matching über mehr als 100 Websites hinweg war anfangs die größte Hürde
    • Das meiste lässt sich mit regulären Ausdrücken lösen, aber manuelles Mapping ist nötig
    • Scraper und Infrastruktur aufzubauen ist eher einfach, die Wartung ist schwierig
    • Wenn Produkte verschwinden, ist es schwer, die Ursache des Fehlers herauszufinden
    • Ein interessantes Projekt, aber herausfordernd und mit lästigen Problemen, die gelöst werden müssen
  • Arbeitet in Neuseeland an einem ähnlichen Projekt

    • Verwendet Playwright und Typescript, speichert Parquet-Dateien in Cloud-Storage
    • Sammelt bisher nur Daten und zeigt sie noch nicht an
    • Das Umgehen von Reverse-Proxy-Diensten wie Akamai und Cloudflare ist die Hauptaufgabe
    • In Neuseeland gibt es mindestens drei Startups, die dasselbe tun
    • Inflation treibt viel Innovation an
    • Beobachtet Muster, mit denen Supermärkte Preise kompliziert machen
  • Hat eine ähnliche Website gebaut und viel Aufmerksamkeit bekommen

    • Verwendet auf einem Linode-Server 2 GB RAM, 5 IPv4 und 1000 IPv6
    • Scrapt alle Produkte in Intervallen von bis zu 40 Minuten
    • Nutzt curl impersonate und JSON-Scraping
    • 90 % des Marktes liefern Preise über Ajax-Aufrufe, für die restlichen 10 % werden reguläre Ausdrücke verwendet
    • Website: economizafloripa.com.br
  • Die zwei großen Supermarktketten Australiens könnten durch KI-Algorithmen zur Preis-Analyse ein Monopol bilden

    • KI-Algorithmen könnten zusammenarbeiten, um Gewinne zu maximieren
    • Das wäre legal über öffentliche Preisdaten möglich, und illegal durch das Teilen von Lieferkosten oder Gewinnmargen pro Produkt
    • Verbraucher würden dann den maximal optimierten Gewinn bezahlen
  • Seit über 8 Jahren im schwedischen Markt aktiv

    • Website: matspar.se
    • Kunden können Produkte aus allen großen Online-Shops vergleichen und in den Warenkorb legen
    • Nach dem Vergleich des Gesamtpreises kann der Warenkorb in den gewünschten Shop exportiert werden
    • Scrapet täglich mehr als 30 Millionen Preise
  • Mit Preistransparenz wäre Tracking noch einfacher

    • Beispiel: Vergleich der Preise für Hafermilch in verschiedenen Postleitzahlen und Lebensmittelgeschäften
    • Möglichkeit, „Shrinkflation“ zu verfolgen (gleicher Preis für eine kleinere Menge)
    • Man sollte nicht nur den Preis, sondern auch die Kosten pro Gramm sehen
  • Wie man Änderungen so vornimmt, dass der Scraper nicht ausfällt

    • Es lassen sich automatische Prüfungen hinzufügen, damit sich Preise nicht unnormal ändern
    • Beispiel: Der Preis sollte sich nicht um mehr als 100 % ändern, die Anzahl aktiver Produkte nicht um mehr als 20 %
  • Erfahrung mit Preis-Tracking nach einem Umzug in eine neue Region geteilt

    • Es ist einfacher, in zwei Märkten oder großen Läden zu günstigen Preisen einzukaufen
    • Europa: Aldi/Lidl, USA: Costco/Trader Joe's
    • Online: CamelCamelCamel/Amazon
    • Direkt beim Hersteller zu kaufen kann günstiger sein
  • Schwieriger als das Scraping selbst ist das Umgehen immer ausgefeilterer Blocker

    • Man muss Residential Proxies ständig rotieren und typische Scraping-Muster vermeiden
    • Einige Supermärkte verbergen Netzwerkanfragen
    • Auch das Prüfen von Netzwerkanfragen und Daten in mobilen Apps wird blockiert
    • Wegen der Kosten und des kontinuierlichen Entwicklungsaufwands wurde entschieden, dass es sich nicht lohnt
  • Problem mit clientseitig gerendertem JavaScript

    • Ironischerweise werden die Daten, die die Website füllen, in einem einfachen JSON-Format bereitgestellt, wodurch Scraping zuverlässiger ist