Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich werte gerade eine Website aus nach Monat. Ich habe mir alle Links zu den jeweiligen Monaten bereits gefiltert und ein Programm geschrieben mit Jsoup das einen Link nach meinen Bedürfnissen filtert.
Allerdings müsste ich nun 300-350 Links immer manuell nacheinander einfügen.
Gibts da eine einfachere Möglichkeit, wie ich in folgendem Code mehrere Links einfügen kann?
Java:
Document doc = Jsoup.connect("Website meiner Wahl").get(); //da würde ich gerne nicht nur eine Website ansprechen, sondern gleich alle 300-350
Das ist mir klar, aber wie bringe ich alle Hyperlinks da rein?
Ich könnte alle Hyperlinks in eine txt Datei einfügen und die mit dem BufferedReader einlesen, in jeder Zeile steht ein Hyperlink.
Wie liegen dir denn die Hyperlinks vor? Werden die bei jeder Programmdurchführung neu gefiltert oder hast du alle in einer Datei stehen?
Aber grundsätzlich ja .... du musst die Links natürlich erst in eine Liste laden. Woher du diese lädst bleibt dir überlassen: Ob eine Datei, eine Datenbank oder eben immer frisch von der Webseite.
Die Hyperlinks hab ich in einer Excel Tabelle. Wenn ich sie in ne txt Datei reinkopier, steht pro Zeile ein Hyperlink.
Ich muss eigentlich als nur meinen Parser mit nem bufferedReader kombinieren, der Zeile für Zeile einen Hyperlink einliest und dann jedes Mal meine Parsermethode ausführt. So sähe meine Idee dazu aus (aus nem einfachen Tutorial aus Google geholt und der Versuch meinen Parser zu integrieren:
Java:
public class readLinks
{
public static void main(String[] args) throws FileNotFoundException, IOException
{
String filePath = "C:/Test.txt";
File file = new File(filePath);
if(file.isFile())
{
// Initial setup
FileInputStream inputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder stringBuilder = new StringBuilder();
String line = "";
// Read everything into a StringBuilder
stringBuilder.append(bufferedReader.readLine());
while((line = bufferedReader.readLine()) != null)
{
connector(line); //Mein Parser, line soll eine Zeile sein
}
}
}
public static void connector(String line) {
try {
Document doc = Jsoup.connect(line).get();
Elements ereignisse = doc.select("div#mw-content-text div.gallerytext ul li");
for (Element e : ereignisse) {
System.out.println(e.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Zwei Probleme: Funktioniert soweit EIGENTLICH, allerdings nur, wenn der Link in der zweiten Zeile der txt Datei steht (sollte also eine Kleinigkeit sein).
Am Ende spuckt er mir in der Konsole sogar den Parsertext aus, allerdings passt ihm was nicht:
"Exception in thread "main" java.lang.IllegalArgumentException: Must supply a valid URL
at org.jsoup.helper.Validate.notEmpty(Validate.java:102)
at org.jsoup.helper.HttpConnection.url(HttpConnection.java:60)
at org.jsoup.helper.HttpConnection.connect(HttpConnection.java:30)
at org.jsoup.Jsoup.connect(Jsoup.java:73)
at readLinks.readLinks.connector(readLinks.java:44)
at readLinks.readLinks.main(readLinks.java:34)
"
Also ein Problem mit nem leeren String.
Müsste also das Problem mit dem leeren String in den Griff bekommen und dass er für jede Zeile einen Hyperlink einliest und das ganze am Ende einfach anhängt.
Außerdem überschreibt er bei zwei Links den ersten, sollte auch nur ne Kleinigkeit sein...
Ich kann mir nicht vorstellen, dass ich noch groß davon entfernt bin, aber ich hab im Moment einen Hänger.
// Read everything into a StringBuilder
stringBuilder.append(bufferedReader.readLine());
while((line = bufferedReader.readLine()) != null)
Zwei Probleme: Funktioniert soweit EIGENTLICH, allerdings nur, wenn der Link in der zweiten Zeile der txt Datei steht (sollte also eine Kleinigkeit sein).
Am Ende spuckt er mir in der Konsole sogar den Parsertext aus, allerdings passt ihm was nicht:
"Exception in thread "main" java.lang.IllegalArgumentException: Must supply a valid URL
at org.jsoup.helper.Validate.notEmpty(Validate.java:102)
"
Warum liest du vor der "while"-Schleife eine Zeile in einen StringBuilder? Was machst du mit diesem StringBuilder?
Die "while"-Schleife beginnt so mit Zeile 2.
Bevor du die Methode "connector" in deiner "while"-Schleife aufrust prüfe doch einfach "line" ob es leer ist.
Danke, Problem mit der 2.ten Zeile also gelöst.
Bleibt das letzte "Zweifach"-Problem:
Was du mit der leeren "line" meinst, verstehe ich nicht ganz, da line ja am Anfang leer ist mit line = "";
Das Programm liest einen Link jetzt genauso aus wie der Parser einzeln mit dem gleichen Link. Wenn ich mehrere Links einfüge, verfälscht er aber das ganze, weil er immer wieder was neues reinschreibt, da muss auch noch ein kleiner Wurm drin sein.
Du hast geschrieben am Ende bekommst du eine Exception auf der Konsole angezeigt.
Ich nehme an weil eine leere Zeile eingelesen wird. Daher einfach in der "while"-Schleife auf einen leeren String prüfen.
Wenn ich mehrere Links einfüge, verfälscht er aber das ganze, weil er immer wieder was neues reinschreibt, da muss auch noch ein kleiner Wurm drin sein.
Was wird verfälscht? Wo wird immer wieder was neues reingeschrieben?
Laut deinem Programm wird Zeile für Zeile aus einer Datei gelesen, mit jeder Zeile machst du etwas und gibst etwas auf der Konsole aus.
Ich sehe hier nichts mit "wo reinschreiben".
Jetzt hab ich kapiert, was du meinst mit der leeren line.
Java:
public static void connector(String line) {
try {
if (!line.isEmpty()) { //damit ist die Fehlermeldung nun weg!
Document doc = Jsoup.connect(line).get();
Elements ereignisse = doc.select("div#mw-content-text div.gallerytext ul li");
for (Element e : ereignisse) {
System.out.println(e.text());
}}
Also Fehlermeldung auch weg
Jetzt scheiterts "nur" noch am richtigen Ergebnis.
Wenn ich einen Link einfüge und ihn manuell mit dem Parser überprüfe habe ich das gleiche Ergebnis.
Wenn ich nun zwei Links einfüge und die in Excel reinkopiere habe ich statt zu erwartenden 1500 Zeilen weniger als wenn ich einen Link einfüge.
Kann das sein, dass die Konsole nur eine bestimmte Anzahl an Zeilen widergibt und diese danach wieder leert und weiter schreibt?
Edit: Ich glaube es liegt daran, dass ich wsh die maximale Zeichenanzahl mit zwei ausgewerteten Links übersteige...
Ja bei Eclipse kann man einstellen das die Konsole max 10000 Zeichen anzeigen soll, aber auch unendlich viele.
Lass dir am besten pro Link eine Datei erstellen mit dem Ergebnis, dann hast du es dauerhaft und auch "schön getrennt".