【问题标题】:Java JSoup error fetching URLJava JSoup 错误获取 URL
【发布时间】:2023-03-17 08:18:01
【问题描述】:

我正在创建一个应用程序,它使我能够从特定网站获取值到控制台。该值来自 <span> 元素,我正在使用 JSoup

我的挑战与此错误有关:

获取网址时出错

这是我的 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());
        }
    }
}

这是控制台上的错误:

线程“main”org.jsoup.HttpStatusException 中的异常:获取 URL 的 HTTP 错误。状态=403,网址=Java Html parser to extract specific data? 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:590) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540) 在 org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227) 在 org.jsoup.helper.HttpConnection.get(HttpConnection.java:216) 在 TestSl.main(TestSl.java:19)

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

【问题讨论】:

  • 403 Forbidden 错误是一个 HTTP 状态代码,这意味着由于某种原因绝对禁止访问您尝试访问的页面或资源。
  • 所以在基本情况下,我无法获取该数据?也许使用一些替代品?还是服务器/网站不允许任何 HTML Phrasers 获取数据?
  • 不确定该网站是否允许您使用 HTML 解析器。但 HTML 解析器很可能在端口 443 或 80 上工作,所以我认为情况并非如此。可能是您实现代码的方式......
  • 谢谢。我还有一个问题。所以我尝试了谷歌(再次,跨度和它的类名)。我没有收到错误,但我的控制台上没有结果。我已经重新阅读了我的代码足够多次,但我无法弄清楚我哪里出错了。有什么建议吗?

标签: java jsoup


【解决方案1】:

设置用户代理头:

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

堆栈交换

收件箱

声誉和徽章

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


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

【讨论】:

  • 谢谢。终于奏效了。请您详细说明一下。我哪里做错了?
  • 好吧,我还有一个问题:/ stackoverflow 示例效果很好。但我有另一个网站,我没有得到任何结果。我不再收到错误消息,但没有向控制台吐出任何值。 binary.com/trading?l=EN 在该页面中有一个存储数值的跨度。就在小图旁边。类随着值的上升和下降而变化。现在有一个ID叫做“spot”。我在代码中同时使用了类名和 ID,但在控制台上没有得到任何结果。你能提出任何理由吗?
  • 也许 StackOverflow 正在嗅探用户代理。我知道他们目前正在积极尝试防止网络抓取滥用。这里有一些好的建议:learn.scrapehero.com/…
  • 如果您还有其他问题/问题,我建议您提供更多详细信息并创建一个新帖子。 :)
  • 是的,我明白了。我的意思是网络报废可能会导致巨大的误解。但是你能建议我为什么从stackoverflow而不是从二进制网站获取数据吗?有什么正当理由吗?还是他们的服务器拒绝访问?这是我能做的最好的解释:p 我的意思是我从 stackoverflow 示例中获取值,但即使我使用类名或 ID,我也没有从 Binary 网站获取任何值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多