Hallo!
Für meine Masterarbeit bin ich dabei einen Crawler zu schreiben. Ich muss eine Strukturanalyse des E-Tourismus Marktes durchführen. Dazu muss ich einen Webgraphen erstellen und möchte z.B. die Anzahl der In-Links sowie der Out-Links einer Seite bestimmen.
Ich lade eine Seite mit folgendem Befehl runter:
Durchsuche dann die Seite nach Links und trenne externe und interne Links, die ich dann in der Datenbank speichere. Wenn alle internen Links durchgearbeitet sind gehe ich zum ersten gefundenen externen Link und durchsuche diese Seite nach links usw.
Um die In- und Out-Links zu bestimmen speichere ich noch zusätzlich pro externen Link eine Tabelle (wenn Datenbank) oder ein File in welchem ich dann schreibe wohin der Link führt oder woher er kommt.
Leider komme ich immer zu einem java.lang.OutOfMemoryError.
Meine Frage an euch ist:
Ist es überhaupt möglich einen Crawler zu schreiben der nicht irgendwann auf dieses Problem stößt, vorausgesetzt man arbeitet mit einem einzigen "normalen" Rechner und wenn ja wie?
Bisher arbeite ich nicht mit Threads und soviel ich verstanden habe würde dies das Problem auch nicht lösen.
Ich setze immer alle Objekte auf null und starte dann manuell den Garbage Collector. Dies hilft zwar ein bisschen, aber nicht viel.
Es macht wenig Unterschied ob ich zur Speicherung der In- und Out-Links die Datenbank oder Files verwende.
Ich würd mich freuen wenn mir jemand weiterhelfen könnte.
Grüße,
Roland
Für meine Masterarbeit bin ich dabei einen Crawler zu schreiben. Ich muss eine Strukturanalyse des E-Tourismus Marktes durchführen. Dazu muss ich einen Webgraphen erstellen und möchte z.B. die Anzahl der In-Links sowie der Out-Links einer Seite bestimmen.
Ich lade eine Seite mit folgendem Befehl runter:
Java:
referenz = new URL(url);
is = new InputStreamReader(referenz.openStream());
in = new BufferedReader(is);
while ((zeile=in.readLine())!=null) {
while (zeile.indexOf("<a href=\"http://")!=-1) {
....
Durchsuche dann die Seite nach Links und trenne externe und interne Links, die ich dann in der Datenbank speichere. Wenn alle internen Links durchgearbeitet sind gehe ich zum ersten gefundenen externen Link und durchsuche diese Seite nach links usw.
Um die In- und Out-Links zu bestimmen speichere ich noch zusätzlich pro externen Link eine Tabelle (wenn Datenbank) oder ein File in welchem ich dann schreibe wohin der Link führt oder woher er kommt.
Leider komme ich immer zu einem java.lang.OutOfMemoryError.
Meine Frage an euch ist:
Ist es überhaupt möglich einen Crawler zu schreiben der nicht irgendwann auf dieses Problem stößt, vorausgesetzt man arbeitet mit einem einzigen "normalen" Rechner und wenn ja wie?
Bisher arbeite ich nicht mit Threads und soviel ich verstanden habe würde dies das Problem auch nicht lösen.
Ich setze immer alle Objekte auf null und starte dann manuell den Garbage Collector. Dies hilft zwar ein bisschen, aber nicht viel.
Es macht wenig Unterschied ob ich zur Speicherung der In- und Out-Links die Datenbank oder Files verwende.
Ich würd mich freuen wenn mir jemand weiterhelfen könnte.
Grüße,
Roland