Alle Projekte
Abgeschlossen

Bachelorarbeit: Web-Scraper für die akademische Forschung

Forschende brauchen große Datenmengen, aber längst nicht jede Webseite bietet eine API. Diese Bachelorarbeit entwickelt einen Web-Scraper als lokale Spring-Boot-Anwendung, der Tabellen und Listen in ihren vielen Ausprägungen zuverlässig extrahiert, in einer Datenbank verwaltet und nach CSV oder JSON exportiert.

Zeitraum
Apr — Jul 2025
Rolle
Bachelorarbeit · Einzelarbeit · Note 1,0
Kontext
Heinrich-Heine-Universität Düsseldorf · Lehrstuhl für Datenbanken und Informationssysteme · Gutachter: Prof. Dr. Stefan Conrad, Prof. Dr. Michael Leuschel

Über das Projekt

Web Scraping ist für die akademische Forschung oft der einzige Weg an Daten, die sonst unzugänglich blieben — etwa wenn eine Webseite keine API anbietet. Genau hier setzt die Arbeit an: Statt auf externe Dienste angewiesen zu sein, sollte der Lehrstuhl ein eigenes, frei konfigurierbares System bekommen, das sich auf die jeweiligen Forschungsprojekte zuschneiden lässt.

Entstanden ist eine lokale Webanwendung in Java mit Spring Boot. Sie beherrscht zwei Betriebsarten: manuelles Scraping, bei dem man eine URL eingibt und sofort eine Vorschau der extrahierten Daten bekommt, sowie automatisiertes Scraping über konfigurierbare Tasks, die ein Scheduler in Intervallen von fünf Minuten bis zu vier Wochen anstößt. Die Ergebnisse landen in einer Datenbank, lassen sich in der Oberfläche nachbearbeiten — Spalten umbenennen oder löschen — und nach CSV oder JSON exportieren, inklusive automatischer Typzuweisung.

Der inhaltliche Kern liegt auf der robusten Extraktion von Tabellen- und Listenstrukturen. Da HTML in der Praxis in unzähligen Varianten auftritt, wurden spezialisierte Extraktionsmethoden mit Fallback-Strategien entworfen: tief verschachtelte Listen, Listeneinträge aus mehreren HTML-Elementen, leere und whitespace-dominierte Felder, unregelmäßige Header. Für dynamische, JavaScript-getriebene Seiten kommt Selenium zum Einsatz, das echte Nutzerszenarien simulieren kann — anders als reine HTML-Parser wie JSoup.

Architektonisch folgt die Anwendung dem Ports-and-Adapters-Muster (hexagonale Architektur) mit sauber getrennten Application-, Domain- und Infrastructure-Schichten. Dependency Inversion hält den Anwendungskern frei von Infrastrukturabhängigkeiten, Datenbankobjekte sind konsequent von Domain-Modellen getrennt. Das macht das System nicht nur wartbar, sondern auch gut testbar — abgesichert durch umfangreiche Unit- und Integrationstests über Controller, Services, Datenbank und Scraper.

Für Performanz sorgt Multithreading: Die zu verarbeitenden Daten werden in gleich große Blöcke aufgeteilt und parallel abgearbeitet, wobei die Threadanzahl konfigurierbar ist und gegen die real verfügbaren Kerne validiert wird. Als Datenbank fiel die Wahl bewusst auf MongoDB, weil gescrapte Inhalte heterogen und schemalos sind — alle Ergebnisse landen in einem einheitlichen ScrapedData-Modell samt Metadaten.

Kernpunkte

  • Zwei Betriebsarten: manuelles Scraping mit Live-Vorschau und automatisierte Tasks über einen Scheduler (Intervalle von 5 Minuten bis 4 Wochen, pausierbar ohne Konfigurationsverlust)
  • Robuste Extraktion von Tabellen und Listen in vielen Ausprägungen — inklusive tief verschachtelter Listen, mehrteiliger Listeneinträge und unregelmäßiger Header, abgesichert durch Fallback-Methoden
  • Selenium-basierter StealthWebScraper für dynamische, JavaScript-gerenderte Seiten
  • Hexagonale Architektur (Ports and Adapters) mit Dependency Inversion und strikter Trennung von DAOs und Domain-Modellen
  • Parallele Verarbeitung per Multithreading mit konfigurierbarer Threadanzahl und Validierung gegen die verfügbaren Kerne
  • MongoDB als schemalose Persistenz mit einheitlichem ScrapedData-Modell inklusive Metadaten
  • Export nach CSV und JSON mit automatischer Typzuweisung
  • Umfangreiche Testsuite mit JUnit, Mockito und Spring Test über Controller, Services, Datenbank und Scraper

Tech-Stack

Sprache

Java 17

Backend

Spring Boot Spring MVC Spring Data MongoDB Spring Validation

Frontend

Thymeleaf HTML CSS

Scraping

Selenium

Datenbank

MongoDB

Infrastruktur

Docker Docker Compose Gradle

Tests

JUnit Mockito AssertJ Spring Test

Fragen zu diesem Projekt?