Hallo zusammen,
ich hab' da ein Problem, bei dem ich als Java-Neuling nicht weiterkomme...
Und zwar möchte ich einen Website Crawler programmieren. Webseiten laden und darin Links erkennen funktioniert auch schön, aber ich scheitere daran, alle Links zu verfolgen und eine Website auf diese Weise ganz zu erfassen.
Ich habe zwei Ansätze versucht:
1) Rekursion
Geht in etwa so: Erste Instanz der Klasse liest Startseite ein, erkennt Links und macht eine eigene neue Instanz von sich selbst pro erkannten Link.
Problem: wie wissen die einzelnen Instanzen dann voneinander, welche Links schon gecrawlt sind und welche nicht? Es gibt ja nicht sowas wie globale Variablen in Java, resp. die wären Bad Code Design.
2) Liste
Ich lese die Startseite ein, erkenne Links und füge diese Links in eine Liste ein, welche es abzuarbeiten gilt. Diese Liste wächst vorzu bei neu erkannten Links, was bei einem Iterator über die Liste eine 'Concurrent Modification Exception' auslöst. Geht also auch nicht...
Wer weiss hier was? Ich hoffe, ich konnte das Problem einigermassen verständlich darlegen...
ich hab' da ein Problem, bei dem ich als Java-Neuling nicht weiterkomme...
Und zwar möchte ich einen Website Crawler programmieren. Webseiten laden und darin Links erkennen funktioniert auch schön, aber ich scheitere daran, alle Links zu verfolgen und eine Website auf diese Weise ganz zu erfassen.
Ich habe zwei Ansätze versucht:
1) Rekursion
Geht in etwa so: Erste Instanz der Klasse liest Startseite ein, erkennt Links und macht eine eigene neue Instanz von sich selbst pro erkannten Link.
Problem: wie wissen die einzelnen Instanzen dann voneinander, welche Links schon gecrawlt sind und welche nicht? Es gibt ja nicht sowas wie globale Variablen in Java, resp. die wären Bad Code Design.
2) Liste
Ich lese die Startseite ein, erkenne Links und füge diese Links in eine Liste ein, welche es abzuarbeiten gilt. Diese Liste wächst vorzu bei neu erkannten Links, was bei einem Iterator über die Liste eine 'Concurrent Modification Exception' auslöst. Geht also auch nicht...
Wer weiss hier was? Ich hoffe, ich konnte das Problem einigermassen verständlich darlegen...