Hallo liebes Byte-Welt-Forum,
ich habe folgendes Problem:
Ich möchte gerne den HTML Code einer Website (bei gegebener URL)
herunterladen. Jetzt, wo ich zum ersten Mal eine URL mit https verwende
funktioniert meine bisher bewährte Funktion nicht mehr.
public static final String getHTML_Code(String url) throws Exception
{
String pageText = "";
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
while ((line = br.readLine()) != null)
{
pageText += line+"\n";
}
br.close();
return pageText;
}
java.io.IOException: Server returned HTTP response code: 400 for URL: https://phys.org
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1838)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
Mit meinem Browser kann ich die Website problemfrei ansteuern.
Was kann ich tun?
public static void main(String[] args) {
try {
String code = "";
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(new URL("https://google.de").openStream()));
while ((line = br.readLine()) != null) {
code += line + "\n";
}
br.close();
System.out.println(code);
} catch (IOException ex) {
ex.printStackTrace();
}
}
Das funktioniert bei mir ohne Probleme? Bei deiner Beispiel-URL kommt bei mir allerdings der gleiche Fehler. Denke daher liegt an der Webseite nicht an Java
Es handelt sich um https://phys.org
Habt ihr sonst eine Idee wie man automatisiert an den HTML Code
dieser Website bzw. einzelner Artikel dieser Website kommen kann?
Es ist wichtig für mich Zugriff auf genau diese Website zu haben.
Das wird schwierig bei 70.000 Seiten es händisch zu machen,
aber man könnte ein Programm schreiben welches die Maus
bewegt und klickt. Ich glaube darauf wird es dann hinauslaufen.
Danke Euch allen trotzdem,
falls jemand noch ne andere Idee hat, wäre ich dankbar,
m.f.G.: Developer_X
Prinzipiell war die Idee folgende:
Diese Websiten: https://phys.org/technology-news/energy-green-tech/sort/date/all/page_X_.html
(wobei X von 1 bis 707 geht) herunterzuladen, dort die jeweils 10 URLs zu den
Artikeln herauszufiltern, und am Ende 7070 Artikel anhand der URLs herunterzuladen,
um diese dann weiterzuverarbeiten.
Würde dir noch etwas anderes einfallen als einen Robot zu schreiben welcher die
Maus steuert und einen Browser bedient?
ROBOTS sind vereinfacht gesagt Webcraweler = nicht erlaubt / Grauzone,
Robot sind vereinfacht gesagt Roboter, die zB die Maus steuern = Grauzone.
Es stehen sich anzunehmen zwei konträre Interessen gegenüber, die der Webseite und deine. Die Webseite möchte die Anzahl der Zugriffe nicht zu viele und du möchtest ca. 7000 Artikel aufrufen.
Nein, eigentlich fällt mir dazu nüschts ein, was nicht in der Grauzone läge.
ich glaube die Website hat nichts dagegen,
es geht um eine umfangreiche Untersuchung
die eigentlich nur sehr entfernt etwas mit der
Website zu tun hat…mehr kann/darf ich dazu auch nicht sagen.
ich werde dann halt mal schauen wie ich das
ganze auf diesem sehr umständlichen wege
realisiere…danke trotzdem.
Doch genau das ist der Fall. Diese Seite möchte nicht automatisch analysiert werden und macht es bei solchen „naiven“ Versuchen, wie du es hier machst den Leuten etwas schwer.
Ungeachtet, was du mit dem Content machen möchtest, gibt es bestimmt 10000 mehr von solchen Leuten, die automatisch Content klauen wollen. Schon gar, wenn es sich um Webseiten mit Redaktionellen Infos handelt.
Würde dir noch etwas anderes einfallen als einen Robot zu schreiben welcher die
Maus steuert und einen Browser bedient?
HTTP 400 bedeutet, dass der Server dein „GET Request“ erhalten hat und diesen als falsch (bad) für sich deklariert hat.
Das kann nun viele Gründe haben.
Anfangen kannst du mit einfachen AGENT Informationen. Das sind Informationen, die Browser beim Aufruf der Seite mitschickt. Fehlen diese resultiert die Antwort in 400. Diese müssen bei deinem GET-Request mitkommen.