Jsoup: Mehrere Links nacheinander parsen

tabaluga

Mitglied
Hallo,

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

Bin für jeden Tipp dankbar.

MfG
 

tabaluga

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

Alternativen?
 

Joose

Top Contributor
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.
 

tabaluga

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

MfG
 
Zuletzt bearbeitet:

Joose

Top Contributor
Java:
			// 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.
 

tabaluga

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

Joose

Top Contributor
Was du mit der leeren "line" meinst, verstehe ich nicht ganz, da line ja am Anfang leer ist mit line = "";

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".
 

tabaluga

Mitglied
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...
 
Zuletzt bearbeitet:

Joose

Top Contributor
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".
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Web Crawler Algorithmen mit Jsoup Allgemeine Java-Themen 3
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
I JSOUP / Shiro und SessionId Allgemeine Java-Themen 5
T JSoup findet input Feld nicht?! Wie kann ich das Feld finden? Allgemeine Java-Themen 3
F Jsoup mit Javascript und onLoad Allgemeine Java-Themen 2
N Jsoup, Links weiter benutzen Allgemeine Java-Themen 5
F Selektornachhilfe JSoup Allgemeine Java-Themen 2
KeVoZ_ JSoup - HTML Tag entfernen Allgemeine Java-Themen 1
KeVoZ_ JSoup - Website Inhalt/Element mit String vergleichen Allgemeine Java-Themen 2
J Jsoup Filtern Allgemeine Java-Themen 5
I JSoup Class auslesen Allgemeine Java-Themen 1
I Jsoup überprügen ob überhaupt was eingelesen wurde Allgemeine Java-Themen 10
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
berserkerdq2 Ist es schlechter Programmierstyle mehrere Panes aufeinander zu machen? Allgemeine Java-Themen 1
Tarrew OpenAPI Schnittstelle - Mehrere Kunden mit unterschiedlichen Zugriffsrechten Allgemeine Java-Themen 2
A Mehrere for-Schleifen Allgemeine Java-Themen 2
M Mehrere Sounds Allgemeine Java-Themen 3
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
Avalon DTO aus mehrere Entitäten erstellen Allgemeine Java-Themen 5
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
L Mehrere .Jar Files aufrufen Allgemeine Java-Themen 9
L mehrere Methoden Allgemeine Java-Themen 19
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
T String mehrere Worte Allgemeine Java-Themen 2
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
S libGDX mehrere Texturen zu Einer zusammenfassen Allgemeine Java-Themen 0
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
OnDemand CSV parsen mehrere Zeilen Allgemeine Java-Themen 22
K Mehrere Programmiersprachen gleichzeitig lernen Allgemeine Java-Themen 3
C Mehrere Seiten drucken in Hoch- und Querformat Allgemeine Java-Themen 0
perlenfischer1984 Mehrere Komponenten erstellen Allgemeine Java-Themen 3
F AWT Mehrere Tastatureingaben verarbeiten Allgemeine Java-Themen 5
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
F Mehrere JTables' drucken Allgemeine Java-Themen 0
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
P Mehrere Java Versionen auf dem Rechner Allgemeine Java-Themen 3
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
S PrintWriter.println() schreibt mehrere Zeilen Allgemeine Java-Themen 19
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
E Lesen von mehrere Csv-Datei und ihre Inhalte vergleichen Allgemeine Java-Themen 3
K GUI-Entwicklung - Dispose, enabling und mehrere Controller Allgemeine Java-Themen 1
M Eclipse Mehrere Threads, mehrere Konsolen Allgemeine Java-Themen 4
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
H Mehrere Bilder aus einer Datei lesen Allgemeine Java-Themen 2
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
K Mehrere Arrays auf einmal erstellen Allgemeine Java-Themen 2
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
J JFreeChart - Mehrere X-Achsen Einteilungen Allgemeine Java-Themen 3
S Mehrere Shapes "malen" Allgemeine Java-Themen 3
M Input/Output Mehrere Bilder aus Resourcen auslesen Allgemeine Java-Themen 8
J Erste Schritte Mehrere Mauszeiger für Ping Pong Game Allgemeine Java-Themen 7
P Mehrere MP3s abspielen Allgemeine Java-Themen 3
M Mehrere CRLF entfernen Allgemeine Java-Themen 13
F Mehrere Threads - ein Stack Allgemeine Java-Themen 6
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
G mehrere Threads starten/stoppen Allgemeine Java-Themen 4
A Email versenden mehrere Zeilen Allgemeine Java-Themen 10
D Mehrere String-Werte in eine Tabellen-Zelle schreiben Allgemeine Java-Themen 8
R JTree - Mehrere Roots Allgemeine Java-Themen 6
Beckenbauer Mehrere Paragraphe in eine Word Datei schreiben Allgemeine Java-Themen 4
H Mehrere Anwendungen von Java kontrollieren lassen Allgemeine Java-Themen 10
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
O split mit einem ODER mehrere Tabulatoren oder Leerzeichen Allgemeine Java-Themen 6
M JFreeChart mehrere PieCharts erstellen Allgemeine Java-Themen 2
S Wie kann ein Observer mehrere Observables beobachten? Allgemeine Java-Themen 9
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
B mehrere services in einem client Allgemeine Java-Themen 10
Meldanor Speichern der Datenbank - Lohnen sich mehrere Threads? Allgemeine Java-Themen 2
G Process - mehrere Commands?! Allgemeine Java-Themen 2
O Mehrere Exemplare(Kopieen) drucken Allgemeine Java-Themen 2
S log4j Logging über mehrere Klassen Allgemeine Java-Themen 13
F 1 Key - mehrere Values Allgemeine Java-Themen 3
G JOGL mehrere GLCanvas erstellen Allgemeine Java-Themen 2
S Mehrere Listen ineinander verschachteln Allgemeine Java-Themen 22
P Java3D mehrere Ebenen parallel zu yz-Ebene Allgemeine Java-Themen 9
R mehrere jar Dateien kompinieren Allgemeine Java-Themen 14
P Mehrere Instanzen der selben Appl. verhindern Allgemeine Java-Themen 12
M Scanner-Methode: Mehrere Eingaben mit Exception behandeln Allgemeine Java-Themen 10
I Wie kann ich mehrere Mp3 Tags ausgeben? Allgemeine Java-Themen 6
I Mehrere MP3 Dateien einlesen? Allgemeine Java-Themen 3
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
C ArrayList sortieren (mehrere Kriterien) Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben