【问题标题】:Java Jsoup Error HandlingJava Jsoup 错误处理
【发布时间】:2016-04-25 17:24:14
【问题描述】:

我有以下方法:

public Article buildArticle(SNSpecific specific, String urlToScrape) throws IOException {


        Document page = Jsoup.connect(urlToScrape).timeout(10*1000).get();

        Article a = new Article();
        a.setWebsite("http://www.svensktnaringsliv.se/");
        a.setUrl(urlToScrape);
        a.setTitle(page.select(specific.getTitleSelector()).text());
        a.setDiscoveryTime(page.select(specific.getDateAndTimeSelector()).text());

        if(isPdfPage(urlToScrape))
        {
            Elements e = page.select("div.indepth-content > div.content > ul.indepth-list a");

            a.setText(page.select("div.readmoreSummary").text() + "For full article: " +
                    e.first().attr("href"));
        }else {
            a.setText(page.select(specific.getContentSelector()).text());
        }
        return a;
    }

问题是有时即使我更改了超时,它也无法连接到urlToScrape,而且我不想等待太久的页面,这就是为什么我正在寻找除timeout() 方法之外的替代解决方案,还有什么方法可以解决这个问题?(我有大约 200 页要抓取)。

【问题讨论】:

    标签: java html css jsoup


    【解决方案1】:

    还有什么方法可以解决这个问题?(我有大约 200 页要抓取)。

    我可以看到两个选项:

    • 在两次请求之间让服务器休息一下。
      在两次提取之间随机暂停 2000 毫秒到 5000 毫秒

    • 使用代理
      如果您不想在两次提取之间暂停

    【讨论】:

    • 我使用了第一个选项,效果很好! :)
    • @imoteb 这没有反映在我的回答中,但您可以在 2000 毫秒到 5000 毫秒之间随机暂停。
    • 我实际上像你提到的那样延迟了一些时间,如果它再次引发异常,我会将链接放入队列中稍后再试
    猜你喜欢
    • 2012-05-01
    • 2017-02-25
    • 1970-01-01
    • 2011-05-17
    • 2023-03-17
    • 2013-11-06
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多