Website Crawler programmieren

croni

Mitglied
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... ;)
 

ARadauer

Top Contributor
liste und keinen iterator verwenden ;-)

Java:
import java.util.ArrayList;



public class Test  {

   public static void main(String[] args) throws InterruptedException {

      ArrayList<String> list = new ArrayList<String>();
      list.add("Link 1");
      list.add("Link 2");
      for(int i = 0; i < list.size(); i++){
         System.out.println(list.get(i));
         list.add("neuer Link "+i);
         Thread.sleep(1000);
      }
   }

}

benutzt du mehrere threads?
 

Generic1

Top Contributor
Eine ConcurrencyModification wird ausgelöst, wenn mehrere Threads auf eine List o.ä zugreifen,
Mein Vorschlag mal:

Java:
public class CrawlerThread extends Thread {

public void run() {
  try {
    crawl(root);
    }
  catch(InterruptException e) {
    }
}
}
 

fastjack

Top Contributor
Den Iterator kannst Du schon verwenden. Du mußt nur in der Schleife aufpassen, daß wenn Du die zugrundeliegende Datenstruktur änderst, das über die Iterator-Methoden machst.
Beim Speichern von Links und anschließendem Suchen, ob ein Link schon vorhanden ist, würde ich eine Map verwenden, darin kannst Du viel effizienter Suchen, als bei einer stetig wachsenden Liste, bei der Du im worst case alle Elemente auf Gleichheit prüfen mußt.
 

fastjack

Top Contributor
@generic1 er meint die ConcurrentModificationException, die wird u.a. ausgelöst, wenn der Iterator mitbekommt, das seine zugrundeliegende Datenstruktur ohne sein Mitwirken geändert wurde.
 

slawaweis

Bekanntes Mitglied
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.
sie brauchen eine gemeinsame Schaltzentrale, wie z.B. bei Flugzeugen am Flughafen, die alle vom Kontrollturm koordiniert werden. Der Kontrollturm muss nicht global sein, es muss nur jeweils eine Referenz jeder neuen Instanz des Crawlers übergeben werden.

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...
was Du jetzt brauchst ist keine Liste, sondern eine Schlange. In diesem konkreten Fall die java.util.concurrent.LinkedBlockingQueue .

LinkedBlockingQueue (Java Platform SE 6)

Slawa
 

fastjack

Top Contributor
Als Java-Neuling würde ich das jetzt erstmal so programmieren, das es sequentiell läuft. Also jeder Link nacheinander bearbeitet wird. Wenns dann läuft und Du dann verstanden wie es funktioniert, dann kannst Du es immer noch nebenläufig programmieren. Erst mal einfach, danach komplex.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java Website Java Basics - Anfänger-Themen 2
M JAVA Programm in Website einbinden Java Basics - Anfänger-Themen 19
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
L Website Icon Java Basics - Anfänger-Themen 9
T Website auslesen Java Basics - Anfänger-Themen 2
Viktim Website auslesen Java Basics - Anfänger-Themen 8
U Website Quelltext auslesen - Javaskripte im Hintergrund? Java Basics - Anfänger-Themen 4
M Website im Hintergrund laden Java Basics - Anfänger-Themen 5
M Website anzeigen Java Basics - Anfänger-Themen 4
J Tabelle aus Website einlesen [nicht im Quellcode] Java Basics - Anfänger-Themen 6
M Teile einer Website auslesen? Java Basics - Anfänger-Themen 2
R Benutzerzugriff nur auf eine Website einschränken Java Basics - Anfänger-Themen 9
N Website HTML mit JavaScript abrufen Java Basics - Anfänger-Themen 9
U Website parsen Java Basics - Anfänger-Themen 11
M Java RegEx bei Website?!? Java Basics - Anfänger-Themen 5
M JSON Datensätze aus Website in Tabelle Java Basics - Anfänger-Themen 17
R Daten von Applet an Website Java Basics - Anfänger-Themen 4
Nic.o Bei einer Website anmelden Java Basics - Anfänger-Themen 6
C Website in *.java einbinden?? Java Basics - Anfänger-Themen 5
C Website Bot programmieren Java Basics - Anfänger-Themen 2
G Programm über Website starten Java Basics - Anfänger-Themen 20
N Java programm in website einfügen Java Basics - Anfänger-Themen 2
F Jar File in Website einbinden Java Basics - Anfänger-Themen 4
Z Daten aus Website auslesen Java Basics - Anfänger-Themen 17
K Änderungsdatum einer Website herausfinden Java Basics - Anfänger-Themen 6
Developer_X Durch JTextPane eine Website anzeigen Java Basics - Anfänger-Themen 4
S Programm mit Website verknüpfen Java Basics - Anfänger-Themen 3
Mal Bild Datei mit Tags von Website laden Java Basics - Anfänger-Themen 9
Developer_X Applet in Website einbringen Java Basics - Anfänger-Themen 30
L Zugriff auf Steuerelemente einer website Java Basics - Anfänger-Themen 2
G ActionListener zum öffnen einer website Java Basics - Anfänger-Themen 10
rambozola jars für website verwenden? Java Basics - Anfänger-Themen 23
R Website mit Java parsen Java Basics - Anfänger-Themen 4
S Suchfunktion auf offline Website Java Basics - Anfänger-Themen 5
U Website aufrufen in java Java Basics - Anfänger-Themen 8
B Mit Java eine Website "steuern" Java Basics - Anfänger-Themen 18
B Website öffnen Java Basics - Anfänger-Themen 5
D OOP Markdown-Crawler Java Basics - Anfänger-Themen 3
V Image Crawler Java Basics - Anfänger-Themen 3
Haubitze_Broese Crawler? Java Basics - Anfänger-Themen 23
C Crawler Java Basics - Anfänger-Themen 2
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
S Kreisberechnung3 Buch: Programmieren lernen mit Java von Hans-Peter Habelitz Java Basics - Anfänger-Themen 39
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
K Java programmieren Java Basics - Anfänger-Themen 6
V_Fynn03 Kontrolle des Quelltextes (Bank programmieren)(GUI) Java Basics - Anfänger-Themen 6
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
N Ticketautomat programmieren Java Basics - Anfänger-Themen 63
M Rechner programmieren Java Basics - Anfänger-Themen 3
V_Fynn03 Java Bruchrechner programmieren Java Basics - Anfänger-Themen 13
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
L Erste Schritte Bin ich "zu dumm" oder nicht geeignet zum Programmieren? Java Basics - Anfänger-Themen 3
U Ist jemad gut in programmieren (JAVA) und kann mir helfen? Java Basics - Anfänger-Themen 1
H Uhr programmieren Java Basics - Anfänger-Themen 10
T Schalter programmieren Java Basics - Anfänger-Themen 17
S Ampel Programmieren Java Basics - Anfänger-Themen 5
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben