Daten aus Website auslesen

Zapp_Branigan

Aktives Mitglied
Ich würde gerne ein kleines Programm schreiben, dass dabei hilft komplette eBooks aus dem SpringerLink herunter zu laden nachdem unsere Bib einen Zugang gekauft hat.
Leider zerteilt Springer die eBooks in viele kleine Teile was es sehr aufwendig macht ein komplettes Buch herunterzuladen.
Beispiel: SpringerLink - Book

Mein erstes Problem ist gleich, dass ich es nicht schaffe die Seite überhaupt herunterzuladen.

Und danach schließt sich an, dass ich nicht weiß wie ich den HTML-Code auf bestimmte daten wie links oder den Buchtitel etc. durchsuchen kann. Irgendwie sowas wie zwischen „<h2 class="MPReader_Profiles_SpringerLink_Content_PrimitiveHeadingControlName">“ und „</h2>“ steht der Buchtitel aber bei den ganzen / dreht Java ja total durch... wie umgeht man dann sowas?

Ich bin überzeugt ihr könnt mir wie immer helfen 🙂
 
Könnt ihr mir da einen Beispielcode posten der bei der genannten Adresse funktioniert. Ich hatte schon mal folgendes probiert:
Java:
URL url = new URL("http://www.springerlink.com");
		    	//URL url = new URL("http://www.spiegel.de");
		        URLConnection connection = url.openConnection( );
		        InputStream is = connection.getInputStream( );
		        InputStreamReader isr = new InputStreamReader(is);
		        
		        BufferedReader br = new BufferedReader(isr);
		 
		        HTMLEditorKit htmlKit = new HTMLEditorKit( );
		        HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument( );
		        HTMLEditorKit.Parser parser = new ParserDelegator( );
		        HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0);
		        parser.parse(br, callback, true);
Geht aus irgendeinem Grund nicht sondern produziert eine Fehlermeldung. Bei Spiegel gehts. Ich habe keine Ahnugn woran das liegen kann...

Hier die Fehlermeldung:
java.io.IOException: Server returned HTTP response code: 403 for URL: SpringerLink Home - Main
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1313)
at SPLD.main(SPLD.java:318)

Im Browser geht es natürlich und Spiegel.de geht auch.
 
Zuletzt bearbeitet:
HTTP 403 bedeuteut, dass der Server dir nicht erlaubt, die Daten zu lesen. Musst dich also authentifizieren. Meistens mittels Cookie, welcher bei der Anmeldung gesetzt wird. Spätestens jetzt würde ich dir raten, den Post bzw. den Link von Murray auf HTTPClient anzuschauen.

EDIT: ich denke, den Thread kann man ruhig im Anfängerforum lassen (google nach der Fehlermeldung hätte dir das mit der Authentifizierung auch gesagt) ;-)

EDIT nochmal: SpringerLink Home - Main leitet im Browser automatisch nach SpringerLink Home - Main um. Ersteres ist verboten, zweiteres lässt sich auch ohne Anmeldung lesen. Siehe auch HTTPClient, der kann automatische redirects.
 
Zuletzt bearbeitet:
Ich kämpfe gerade bisschen mit den Regulären ausdrücken. Habe mich versucht mich in der JavaInsel schlau zu lesen aber irgendwie bin ich zu doof.
Wie bekomme ich aus folgendem Beispiel das Ergebnis String s = "java-tutor.com\"
Java:
p = Pattern.compile( "<a href=.*>" ); 
Matcher m = p.matcher( "<a href=\"java-tutor.com\">" );
 
Das müsstest du nochmal etwas genauer ausführen - was genau ist warum verboten?

Mit "verboten" meinte ich, dass ein Zugriff auf htt p://springerlink.com in einem HTTP 403 (forbidden) resultiert. Hat man automatische redirects aktiviert (wie im Browser oder mittels HTTPClient einstellbar), dann wird nach htt p://springerlink.com/home/main.mpx weiter geleitet, was kein 403 zur Folge hat.
 
Ich kämpfe gerade bisschen mit den Regulären ausdrücken. Habe mich versucht mich in der JavaInsel schlau zu lesen aber irgendwie bin ich zu doof.
Wie bekomme ich aus folgendem Beispiel das Ergebnis String s = "java-tutor.com\"
Java:
p = Pattern.compile( "<a href=.*>" ); 
Matcher m = p.matcher( "<a href=\"java-tutor.com\">" );

Schau dir mal capturing groups an. Beispiel (evtl. nicht korrekt, nur kurz aus dem Kopf):

Java:
p = Pattern.compile( "<a href=(.*)>" ); 
Matcher m = p.matcher( "<a href=\"java-tutor.com\">" );
matcher.find();
String s = matcher.group(1); //Vorsicht, group(0) bedeutet kompletten Input oder ähnlich, daher group(1)
 
Danke für die schnelle Antwort. Ich habe das ganze mal als:
Java:
Pattern p = Pattern.compile( "<a href=.*>" ); 
		Matcher m = p.matcher( "<a href=\"java-tutor.com\">" ); 
		
		m.find();
		String s = m.group(1);
interpretiert... aber es kommt "Exception in thread "main" java.lang.IndexOutOfBoundsException: No group 1"

:-(
 
Du musst auch eine Gruppe definieren ;-)
Mit "normalen" Klammern, also (). Schau noch Mal genau auf meinen geposteten Code bei Pattern.compile
 

Zurück
Oben