2016-04-21 123 views
4

我正在创建一个应用程序,它将使我能够从特定网站获取值到控制台。值是从<span>元素,我正在使用JSoupJava JSoup错误提取URL

我面临的挑战有此错误的事:

Error fetching URL

这里是我的Java代码:

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()); 
     } 
    } 
} 

这里是控制台的错误:

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)

什么时我做错了,我该如何解决它?

+1

403 Forbidden错误是一个HTTP状态码,这意味着访问您尝试访问的页面或资源是绝对禁止的。 – ryekayo

+0

那么基本上,我没有办法获取这些数据?也许使用一些替代品?或者是服务器/网站不允许任何HTML Phrasers获取数据? – PICKAB00

+1

不知道该网站是否允许您使用HTML解析器..但最有可能的是,HTML解析器不能使用端口443或80,所以我认为情况并非如此。可能是你执行代码的方式.... – ryekayo

回答

5

集的用户代理报头:

.userAgent("Mozilla") 

实施例:

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

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


也许这是相关的:https://meta.stackexchange.com/questions/277369/a-terms-of-service-update-restricting-companies-that-scrape-your-profile-informa

+0

谢谢。终于工作了。请你详细说明一下。我哪里做错了? – PICKAB00

+0

嗯,我还有一个问题:/ stackoverflow的例子很好。但我有另一个网站,我没有得到任何结果。我再也看不到这个错误了,但是没有任何价值观会被传递给控制台。 https://www.binary.com/trading?l=EN 在该页面中存在这个跨度,它存储数值。紧靠小图。班级随着价值的变化而变化。现在有一个名为“spot”的ID。我在我的代码上同时使用了类名和ID,但我在控制台上没有得到任何结果。你能提出任何理由吗? – PICKAB00

+1

也许StackOverflow正在嗅探用户代理。我知道他们正在积极努力防止网络滥用。以下是一些很好的建议:https://learn.scrapehero.com/how-to-prevent-getting-blacklisted-while-scraping/ –