Zum Inhalt springen
WETTBEWERBS- UND PREISINTELLIGENZ

Eine Pipeline, die aus einem öffentlichen Katalog einen Preisverlauf macht

Wer einen Wettbewerber von Hand prüft, bekommt eine Momentaufnahme und keine Möglichkeit, sie mit der letzten Woche zu vergleichen. Wir haben eine Pipeline gebaut, die öffentliche Kataloge Seite für Seite in einem gerenderten Browser liest, die Kategoriestruktur und die Blätterung einer Website selbst herausfindet, ihr Extraktionsrezept beweist, bevor sie ihm traut, und bei jedem Durchlauf einen Preispunkt schreibt. Der Bericht danach ist eine Differenz und keine Halde, und er verlässt das Haus erst, wenn eine Person ihn freigibt.

  • BrancheHandel und E-Commerce
  • Art der ArbeitEigene Plattform, intern gebaut
  • StatusLäuft durchgängig, in Teilen noch unfertig
  • Preisintelligenz
  • Erfassung öffentlicher Webdaten
  • Wettbewerbsrecherche
  • Datenpipelines

Eine Schleife: erfassen, normalisieren, vergleichen, verpacken, freigeben

Die Pipeline läuft je Kunde nach Zeitplan. Zuerst durchsucht sie die eigene Domain des Wettbewerbers nach lesenswerten Seiten, dann erntet sie den Produktkatalog selbst: Kategorie für Kategorie, Seite für Seite, in einem gerenderten Browser. Denn ein in JavaScript aufgebauter Katalog steht nicht in dem HTML, das ein einfacher Abruf zurückgibt. Bewertungen und öffentliche Beiträge fließen in denselben Speicher, sodass am Ende ein Bild des Wettbewerbers steht und nicht nur eine Preisliste.

Alles Erfasste wird in dieselbe Form gebracht. Beträge werden über europäische, türkische und US-amerikanische Schreibweisen hinweg in Zahl und Währung zerlegt. Produkte werden über ihre Identität aktualisiert, ein neuer Durchlauf schreibt also fort statt zu klonen, und erst das Datum des ersten und des letzten Sehens macht neu und verschwunden überhaupt berechenbar. Jeder Durchlauf mit einem Preis schreibt zusätzlich einen Preispunkt, und genau deshalb kann der Bericht eine Differenz sein statt einer Halde.

Der Arbeitsbereich mitten im Lauf: bereits geerntete Kataloge, daneben die Bewertungsanalyse, und Erfassungsjobs, die ihren eigenen Fortschritt melden. Die Wettbewerbernamen sind in der Aufnahme selbst unkenntlich gemacht.
DIE HERAUSFORDERUNG

Was daran schwer war

Einen Wettbewerber zu lesen ist kein Scraping-Problem. Gegen diese drei Fehlerbilder wurde die Pipeline entworfen.

Eine Momentaufnahme lässt sich mit nichts vergleichen

Preise von Hand zu prüfen ergibt eine Liste, die schon beim Abtippen alt ist und nichts hinter sich hat. Die Frage, die ein Category-Team tatsächlich stellt, lautet: Was hat sich seit dem letzten Mal bewegt. Noch so sorgfältiges Abschreiben beantwortet sie nicht, weil der vorherige Zustand nie aufgehoben wurde.

Der Katalog steht nicht im Seitenquelltext

Shops bauen ihr Produktraster heute erst nach dem Laden auf, hängen ihre Bilder an Lazy-Loading-Attribute und verteilen eine Kategorie so auf Seiten, wie es ihre Plattform gerade vorsieht. Wer den Quelltext einer Kategorieseite liest, bekommt eine leere Hülle.

Ein fehlgeschlagener Abruf sieht aus wie ein leeres Regal

Gefährlich ist nicht der Absturz. Gefährlich ist der Durchlauf, der sauber endet und nichts gefunden meldet, während in Wahrheit das Netz kurz gehakt hat. Dieses Ergebnis ist von einer echten Veränderung nicht zu unterscheiden und vergiftet den Vergleich danach.

DIE LÖSUNG

Was wir gebaut haben

Eine geplante Schleife: an den Katalog kommen, seine Struktur verstehen, die Werte vergleichbar machen und die Differenz in etwas verwandeln, das eine Person unterschreibt.

Erfassung, die den Katalog wirklich erreicht

Der Crawl bleibt auf der eigenen Domain des Wettbewerbers, respektiert robots.txt, drosselt sich selbst, begrenzt seine Reichweite und besucht Preis- und Produktseiten vor allgemeinen Seiten. Die Katalogernte ist ein eigener Job: Die Extraktion läuft in der gerenderten Seite, denn nur dort existiert ein in JavaScript gebautes Raster überhaupt.

  • Crawling auf derselben Domain, das robots.txt respektiert, sich selbst drosselt und kommerzielle Seiten zuerst liest.
  • Drei Erfassungs-Engines mit automatischem Rückfall: Eine fehlende optionale Abhängigkeit schwächt einen Crawl ab, statt ihn scheitern zu lassen.
  • Blätterung über Query-Parameter, über Weiter-Links, einseitige Listen und endloses Nachladen, jeweils am Objekt erprobt statt angenommen.

Struktur, die das Modell vorschlägt und der Code beweist

Die echten Kategorien einer Website werden aus ihren eigenen Links und ihrer Sitemap ermittelt und anschließend klassifiziert. Angenommen wird nichts allein aufgrund dieser Klassifikation: Ein Auflösen-und-Extrahieren-Tor muss zeigen, dass das vorgeschlagene Rezept auf der behaupteten Seite tatsächlich Produkte liefert.

  • Kategoriekandidaten stammen aus der Navigation der Website selbst und aus ihrer Sitemap, und jeder wird vor der Nutzung validiert.
  • Einem vorgeschlagenen Extraktionsrezept wird erst getraut, wenn es nachweislich Produkte liefert, mit einem harten Erfindungsverbot im Klassifikationslauf.
  • Namen und Preise laufen durch eine Kette von Rückfällen und bevorzugen die kürzeste saubere Übereinstimmung, damit nie eine ganze Produktkachel für einen Namen gehalten wird.

Werte, die sich wirklich vergleichen lassen

Ein Preis auf einer Seite ist eine Zeichenkette mit Währungszeichen, mit einem Tausendertrennzeichen, das je nach Land etwas anderes bedeutet, und oft mit einem Rabattabzeichen daneben. Alles wird vor dem Speichern in Betrag und Währung zerlegt, und Marken kommen aus einer gepflegten Liste, die sich weigert zu raten.

  • Beträge werden über europäische, türkische und US-amerikanische Schreibweisen hinweg zerlegt, die Währung wird daneben gelesen.
  • Ein Prozentabzeichen wird vor dem Parsen entfernt, und der letzte an eine Währung gebundene Betrag gewinnt, sodass ein Rabatt nie als Preis gespeichert wird.
  • Produkte werden über Durchläufe hinweg nach Identität entdoppelt, ein erneutes Lesen aktualisiert ein Produkt also, statt es zu klonen.

Ein Bericht, der eine Differenz ist, und eine Person, die ihn unterschreibt

Jeder Durchlauf mit einem Preis schreibt einen Verlaufspunkt, der nächste ist damit schon ein Vergleich. Der Änderungsbericht wird aus dem berechnet, was auf der Platte liegt: kein Modellaufruf, kein Netz, keine neuen Tabellen. Das Rendern hinterlässt etwas im Zustand zur Freigabe, und die Freigabe ist der einzige Codepfad, der versendet.

  • Bewegungen nach oben und unten, neue Produkte, verschwundene Produkte und neue Bewertungen, alles deterministisch berechnet.
  • Ein Tabellen-Datenpaket und ein Foliensatz, aus identischen Eingaben byteidentisch gerendert.
  • Nichts erreicht ein Kundenpostfach, bevor eine Person freigibt, und ohne konfigurierten Mailanbieter verweigert der Versand, statt einen zu protokollieren, den es nie gab.
ENGINEERING

Die Entscheidungen, die den Bericht lesenswert machen

Vier Entscheidungen, bei denen es ums Rechthaben ging und nicht ums Beeindrucken.

Ein fehlgeschlagener Abruf ist kein leeres Regal

Fehlgeschlagener Abruf, geladene aber leere Seite und Seite mit Produkten sind im Code drei verschiedene Ergebnisse und nicht eines. Ein Durchlauf meldet sich anhand dieser Belege als vollständig, teilweise oder gescheitert, sodass eine kurze Netzstörung nie als sauberes Ergebnis mit leerem Inhalt ankommt.

Die Abbruchbedingung gehört dem Code

Die Lückenerkennung ist regelbasiert und hat eine harte Obergrenze je Durchlauf, der optionale Modellkritiker sitzt obendrauf und ist standardmäßig aus. Ein Scan kostet am Modell deshalb nichts, solange das niemand bewusst einschaltet, und kein Sprachmodell entscheidet, wann die Arbeit fertig ist.

Reihenfolge, die die Datenbank überdauert

Die Chronologie steckt in einem beim Lesen erfassten Mikrosekunden-Zeitstempel statt in der Einfügereihenfolge, eine Zufallskennung dient nur als letzter Gleichstandsbrecher. Ein Preisverlauf liest sich deshalb gleich, welche Datenbank auch darunter liegt.

Isolation an einer einzigen Engstelle

Jeder Lese- und Schreibzugriff läuft durch eine einzige Zuordnungs-Engstelle, abgesichert durch Zeilensicherheit in der Datenbank selbst, und der Dienst verweigert den Start, wenn seine eigene Laufzeitrolle das umgehen könnte. Die Vergleichslogik erbt diese Grenze, statt sie neu zu bauen.

DIE WIRKUNG

Was sich geändert hat

Qualitativ, denn entstanden ist eine funktionierende Schleife und kein gemessenes Ergebnis.

Verlauf

Vergleich statt Momentaufnahme

Der erste Durchlauf liefert einen Katalog. Jeder weitere liefert eine Differenz, weil die Preise dahinter mit dem Datum ihres Abrufs bereits auf der Platte liegen.

Ehrlich

Durchläufe, die sagen, was sie verpasst haben

Ein Durchlauf, der etwas nicht lesen konnte, sagt das und markiert sich als teilweise. Nichts danach muss raten, ob ein leerer Abschnitt eine Änderung beim Wettbewerber war oder ein fehlgeschlagener Abruf.

Freigegeben

Eine Person vor dem Kunden

Einen Bericht rendern und ihn versenden sind bewusst zwei Schritte. Nie ist etwas hinausgegangen, nur weil ein Zeitplan ausgelöst hat, und eine Gesundheitsprüfung durchläuft die ganze Schleife, ohne das Netz zu berühren oder am Modell etwas auszugeben.

Zuletzt überprüft:

Haben Sie einen Katalog, der Beobachtung verdient?

Sagen Sie uns, welche Quellen zählen und was ein nützlicher Bericht sagen müsste. Wir schätzen die Erfassung ehrlich ein, einschließlich der Teile, die wir ablehnen würden.

Gespräch beginnen