2016-04-21 10 views
4

Ich erstelle eine Anwendung, mit der ich Werte von einer bestimmten Website auf die Konsole abrufen kann. Der Wert ist von einem <span> Element und ich verwende JSoup.Java JSoup Fehler beim Abrufen der URL

Meine Herausforderung hat mit diesem Fehler zu tun:

Error fetching URL

Hier ist mein Java-Code:

public class TestSl { 
    public static void main(String[] args) throws IOException { 
     Document doc = Jsoup.connect("https://stackoverflow.com/questions/11970938/java-html-parser-to-extract-specific-data").get(); 
     Elements spans = doc.select("span[class=hidden-text]"); 
     for (Element span: spans) { 
      System.out.println(span.text()); 
     } 
    } 
} 

Und hier ist der Fehler auf Konsole:

Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403, URL= Java Html parser to extract specific data? at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:590) at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:216) at TestSl.main(TestSl.java:19)

Was ist Ich mache falsch und wie kann ich es lösen?

+1

Die 403 Forbidden Fehler ist ein HTTP-Statuscode, der bedeutet, dass Zugriff auf die Seite oder Ressource, die Sie absolut zu erreichen versuchten, aus irgendeinem Grund verboten ist. – ryekayo

+0

Also im Grunde, es gibt keine Möglichkeit, dass ich diese Daten holen könnte? Vielleicht mit ein paar Alternativen? Oder ist es so, dass der Server/die Website keine HTML-Phrasers zum Abrufen der Daten erlaubt? – PICKAB00

+1

Nicht sicher, ob die Website HTML-Parser verwenden kann. Aber am wahrscheinlichsten arbeitet der HTML-Parser von Port 443 oder 80, also glaube ich nicht, dass das der Fall wäre. Könnte die Art sein, wie Sie den Code implementieren .... – ryekayo

Antwort

5

Stellen Sie den User-Agent-Header:

.userAgent("Mozilla") 

Beispiel:

Document document = Jsoup.connect("https://stackoverflow.com/questions/11970938/java-html-parser-to-extract-specific-data").userAgent("Mozilla").get(); 
Elements elements = document.select("span.hidden-text"); 
for (Element element : elements) { 
    System.out.println(element.text()); 
} 

Stack Exchange

Inbox

Reputation and Badges

Quelle: https://stackoverflow.com/a/7523425/1048340


Vielleicht ist dies im Zusammenhang: https://meta.stackexchange.com/questions/277369/a-terms-of-service-update-restricting-companies-that-scrape-your-profile-informa

+0

Danke. Endlich funktioniert. Können Sie bitte erläutern? Was habe ich falsch gemacht? – PICKAB00

+0

Nun, ich habe noch ein Problem:/ Das Stackoverflow Beispiel funktioniert gut. Aber ich habe eine andere Website, auf der ich keine Ergebnisse bekomme. Ich bekomme den Fehler nicht mehr, aber es werden keine Werte auf die Konsole gespuckt. https://www.binary.com/trading?l=DE In dieser Seite gibt es diese Zeitspanne, in der numerische Werte gespeichert werden. Direkt neben dem kleinen Graphen. Die Klasse ändert sich, wenn der Wert steigt oder fällt. Jetzt gibt es eine ID namens "Spot". Ich habe sowohl den Klassennamen als auch die ID in meinem Code verwendet, aber ich erhalte keine Ergebnisse auf meiner Konsole. Könnten Sie irgendeinen Grund dafür nennen? – PICKAB00

+1

Vielleicht schnüffelt StackOverflow den User-Agent. Ich weiß, dass sie derzeit aktiv versuchen, Missbrauch durch Web Scraping zu verhindern. Hier ist ein guter Rat: https://learn.scrapehero.com/how-to-prevent-getting-blacklisted-while-scraping/ –