Ausgangslage: In der Beschaffungsabteilung führen wir einen eigenen Katalog an Autoteilen und Ersatzteilen. Der Lieferant veröffentlicht aktuelle Preise, Salden und Anwendbarkeit in einem geschlossenen B2B-Katalog, in dem Seiten über JS gerendert werden, einige Anfragen an XHR gehen, es einen Antibot gibt (Header-Prüfungen, Ratenbegrenzung, periodisches CAPTCHA) und die Struktur der Produktkarten geändert wird. Wir brauchen einen stabilen Parser, der regelmäßig Daten aktualisiert und Änderungen aufzeichnet, damit wir nicht alles manuell vergleichen. Technische Umgebung und Einführungen: Linux (Ubuntu 22.04), Python 3.11, PostgreSQL 15. Bereitstellung in Docker Compose. Zugang zu B2B über Login-Passwort und 2FA mit einem Einmalcode per E-Mail (IMAP-Zugriff wird bereitgestellt). Wir stellen Proxys zur Verfügung, deren Qualität jedoch unterschiedlich ist. Wir speichern 2 Beschreibungssprachen (RU/EN), Währungen können unterschiedlich sein. Was passieren soll: ein Dienst, der nach einem Zeitplan Kategorien und Produkte aus einem B2B-Katalog sammelt, den Artikel, die Marke, den Namen, die Preise nach Lager, Salden, Lieferzeiten, Anwendbarkeit/Analoga, Links zu Bildern, Eigenschaften (Schlüsselwert) für jedes Produkt abruft und auch abgekündigte Artikel markiert. Daten sollten in PostgreSQL in einem normalisierten Schema mit einem Änderungsverlauf (Preise/Reste) und der Möglichkeit zum Hochladen in CSV gespeichert werden. Ausführungsschritte: 1) Quell- und Protokollanalyse: Bestimmen Sie Einstiegspunkte, XHR-Endpunkte, Filter-/Paginierungsparameter, Grenzwerte, Anforderungssignaturen, Antibot-Verhalten und Weiterleitungsstrategien. 2) Implementierung von Login und Sitzungen: Autorisierung, 2FA-Verarbeitung über IMAP, Sitzungsspeicherung, automatische Verlängerung, sichere Speicherung von Geheimnissen über Env. 3) Datenerfassung: Kategorien crawlen, Paginierung, Karten sammeln, Bilder nur bei Bedarf laden (Flagge), Merkmale und Analoga extrahieren, Währungen/Maßeinheiten normalisieren. 4) Speicherung: PostgreSQL-Schema (Mindestprodukte, Angebote/Lager, Salden, Preisverlauf, Analoga, Merkmale, Medien), Migrationen, Indizes, Upsert-Logik und Diff-Updates. 5) Stabilität: Proxy-Rotation, Geschwindigkeitsbegrenzung, Backoff, Blockierungserkennung, Wechsel zu einer alternativen Route (XHR vs. HTML), detaillierte Protokolle und Ausführungsmetriken. 6) Export und Berichte: CLI-Befehle zum Exportieren von CSV nach Filtern (Marke, Kategorie, Datum), Bericht über Änderungen für den Zeitraum (wie viele Produkte haben sich nach Preis/Restposten geändert). Einschränkungen: - CAPTCHA kann nicht durch externe kostenpflichtige Dienste gelöst werden. Wenn ein CAPTCHA erscheint, besteht die Aufgabe des Parsers darin, das Ereignis korrekt zu erfassen, Proxy/Pause zu wechseln und so weit wie möglich ohne manuelle Eingabe fortzufahren. - Site-Last: nicht mehr als 1 Anfrage pro Sekunde pro Proxy, maximal 3 parallele Worker. - Code ohne Verbindung zur GUI, Steuerung über CLI und Config. Messbare Akzeptanzkriterien: - Bei einem wiederholten Durchlauf eines Testsatzes mit 5 Kategorien sollten mindestens 95 % der über die integrierte Suche auf der Website gefundenen Produkte erfasst werden (Fehler sind aufgrund vorübergehender Sperrung zulässig, sollten jedoch im Bericht enthalten sein). - Für 100 zufällig ausgewählte Produkte stimmen die Daten in der Datenbank nach Artikel, Marke, Preis und Gleichgewicht mit der Website überein (wir überprüfen dies manuell anhand der Liste). - Beim zweiten Durchlauf ohne Änderungen werden keine unnötigen Duplikate in der Quelle erstellt und die Historie der Preise/Reste wird nicht aufgefüllt. - Protokolle enthalten: die Anzahl der verarbeiteten Seiten, Produkte, Fehler nach Typ, durchschnittliche Antwortzeit, Anzahl der Blockierungen/Wiederholungen. - Docker Compose hebt alles mit einem Befehl auf, es gibt eine README-Datei mit Startanweisungen, Umgebungsvariablen und CLI-Beispielen. Bevorzugte Tools: Playwright (Python) für JS/Anti-Bot-Crawling + Requests/httpx, wo möglich; Destillierkolben für Migrationen; Strukturierte Protokolle (JSON).