Internetseite mit jsoup crawlen [java]

Neue Frage »

Auf diesen Beitrag antworten »
matt99 Internetseite mit jsoup crawlen [java]

Hallo, ich möchte eine Internetseite mit Java (jsoup) durchstöbern. Diese Internetseite hat jedoch mehrere Seiten, welche ich alle nacheinander einmal besuchen möchte und anschließend alle Zahlen der entsprechenden Seite ausgeben soll. Ich habe zwar eine grobe Idee, wie das Programm eine Seite nach der anderen durchsucht, jedoch scheitert es an der Umsetzung.

Mein bisheriger Code:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class crawler {
  private static final int ms_timeout = 5000;
  
  public static void main(String[] args) throws MalformedURLException, IOException
  {
    Document doc = Jsoup.parse(new URL("eineinternetseite.de"), ms_timeout);

    String htmlString = doc.toString();
    
	Pattern pattern = Pattern.compile("\\d+");
	Matcher matcher = pattern.matcher(htmlString);
	
	while(matcher.find())
	{
		System.out.println(matcher.group());
	}
  }
  
}


Meine Idee: Einen Integer nach der URL setzen, welche solange hochgerechnet wird bis das "Ende der Internetseite" erreicht ist, bzw. einfach keine weitere Seite mehr kommt.
Mein Vorteil ist, dass die Internetseite durch ein /page sich trennt. Also:
eineinternetseite.de/page/1 ist Seite 1, eineinternetseite.de/page/2 ist Seite 2, usw.

code:
1:
    Document doc = Jsoup.parse(new URL("eineinternetseite.de/page/" + i), ms_timeout);


Wenn ich jedoch i als Integer definiere, dessen Startwert 1 ist und dann jedesmal i++ durchgeht, bekomme ich eine Fehlermeldung, dass der Typ static sein muss. Und an diesem Punkt kann ich diesen Integer auch nicht mehr erhöhen.
 
Auf diesen Beitrag antworten »
eulerscheZahl

Klingt, als hättest du i außerhalb der main definiert.
Markiere es dann auch als static oder verschiebe die Variablendeklaration in die main Methode (die zweite Alternative ist zu bevorzugen).
Auf diesen Beitrag antworten »
matt99

Tatsächlich war es nur nicht in der main-Methode. Das ist das nicht gleich gesehen habe...

Danke!

Weißt du auch zufällig eine Möglichkeit, das Ende einer Seite zu bekommen? Wenn die Internetseite nur 10 Seiten hat, dann kriege ich ab Seite 11 eine Exception. Kann man das irgendwie mit einer while-Schleife, o.ä. abfangen? Im Endeffekt soll mein i solange erhöht werden, bis das ende der Website gefunden wurde.
Auf diesen Beitrag antworten »
eulerscheZahl

ungetestet:
code:
1:
2:
3:
4:
5:
6:
7:
for (int i = 1; ; i++) { //hier keine Abbruchbedingung
    try {
        //load page i
    } catch (Exception ex) {
        break; //hier wird die Schleife verlassen
    }
}
 
Auf diesen Beitrag antworten »
matt99

Funktioniert :) Besten dank
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »