Web-Scraper zur Abfrage von Produktpreisen

Entwicklung eines cloudbasierten Web-Scrapers

Herausforderung

Im Rahmen eines Forschungsprojektes soll die Abhängigkeit von Produktpreisen von externen Faktoren untersucht werden. Betrachtete Faktoren sind dabei beispielsweise der Standort des Käufers, der verwendete Browser, unterschiedliche Datenschutzeinstellungen oder der Zeitpunkt des Einkaufs. Für die nachgelagerte Auswertung ist eine hinreichend große Zahl an Preisabfragen mit variierenden Parameterkonfigurationen notwendig um statistisch signifikante Aussagen treffen zu können.

Lösung

Wir entwickeln einen cloudbasierten Web-Scraper der zeitgesteuert die Preise für unterschiedliche Produkte und Webseiten abfrägt und aufzeichnet. Die Abfrage erfolgt dabei automatisiert mithilfe des Headless Browsers Puppeteer. Puppeteer ermöglicht die programmatische Steuerung eines Chromium basierten Webbrowsers mit einer Node.js-API.

Aus den abgefragten HTML-Rohdaten der Produktwebseiten werden die Preisinformation mittels Cheerio extrahiert und anschließend als CSV in einem Object-Storage abgespeichert. Diese strukturierte Datenspeicherung erlaubt es im Anschluss Analysen mittels PrestoDB bzw. mittels relationalen Queries durchzuführen, um so erste Auswertungen auf den Daten durchzuführen.

Um eine ausreichende Parallelität der Abfragen zu ermöglichen, containerisieren wir die Anwendung mit Docker und betreiben diese in einem Cluster. Die Zeitsteuerung setzen wir mittels Serverless-Funktionen um. Wir setzen eine Message Queue ein, um Anfragen bei Fehlern erneut auszuführen und eine Entkopplung der Anfragen zu erreichen. Den Anwendungszustand bilden wir ebenfalls Serverless in einer NoSQL-Datenbank ab.

Um die benötigte Infrastruktur in der Cloud abzubilden greifen wir einerseits auf das Serverless Framework zurück. Dieses erlaubt es auf einfache Art und Weise Lambda-Funktionen zu entwickeln und zu deployen. Andererseits verpacken wir die Teile der Anwendung, die Puppeteer nutzen, in einen Docker-Container und betreiben diesen in einem Cluster. Den Cluster selbst erzeugen wir zusammen mit den benötigten Skalierungsregeln mittels Infrastructure-as-Code. Als Deployment-Pipeline, sowohl für die Infrastruktur als auch für die Anwendung selbst, verwenden wir Gitlab.

Ergebnis

Über einen Zeitraum von mehreren Monaten hinweg sammeln wir Preisinformationen der wichtigsten deutschen E-Commerce Seiten. Die von uns implementierten Monitoring und Alerting Funktionen erlauben es uns Fehler frühzeitig zu erkennen und zu beheben. Die gesammelten Daten lassen sich einfach exportieren, um sie so der anschließenden statistischen Datenanalyse zuzuführen.

Nutzen

Technologien