java - 处理连接错误和 JSoup

标签 java connection jsoup

我正在尝试创建一个应用程序来从网站上的多个页面上抓取内容。我正在使用 JSoup 进行连接。这是我的代码:

for (String locale : langList){
        sitemapPath = sitemapDomain+"/"+locale+"/"+sitemapName;
        try {
            Document doc = Jsoup.connect(sitemapPath)
                    .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
                    .timeout(10000)
                    .get();

            Elements element = doc.select("loc");   
            for (Element urls : element) {
                System.out.println(urls.text());
                }
        } catch (IOException e) {
            System.out.println(e);
        }
    }

大多数情况下,一切都完美无缺。但是,我希望能够做一些事情。

首先,有时会返回 404 状态或 500 状态可能是 301。使用下面的代码,它只会打印错误并移至下一个 url。我希望能够做的是尝试能够返回所有链接的 url 状态。如果页面连接打印一个200,如果没有打印相关的状态码。

其次,我有时会遇到此错误“java.net.SocketTimeoutException:读取超时”我可以增加超时,但我更愿意尝试连接 3 次,在第 3 次失败时我想将 URL 添加到“failed"数组,以便我可以在将来重试失败的连接。

有比我知识渊博的人可以帮助我吗?

最佳答案

上面的代码为我返回了一个 IOException 而不是返回正确状态代码的 execute()。

使用 JSoup-1.6.1我必须更改上面的代码才能使用 ignoreHttpErrors(true) .

现在,当代码返回响应而不是抛出异常时,您可以检查错误代码/消息。

Connection.Response response = null;
            try {
                response = Jsoup.connect(bad_url)
                        .userAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5")
                        .timeout(100000)
                        .ignoreHttpErrors(true) 
                        .execute();
            } catch (IOException e) {
                System.out.println("io - "+e);
            }

            System.out.println("Status code = " + response.statusCode());   
            System.out.println("Status msg  = " + response.statusMessage());

输出:

Status code = 404
Status msg  = Not Found

关于java - 处理连接错误和 JSoup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10245519/

相关文章:

java - Guava :如何从列表和单个元素创建显式排序?

android - 如果在 Android 中连接 BLE 设备失败,如何通知用户?

java - 根据 HTML 元素的 href 下载文件

javascript - 如何使用jsoup选择当前div内的img标签

java - Android Rect 宽度和高度与原始尺寸不同

java - 创建自定义 Jasper 报告布局

java - 如何让其他线程继续锁定for循环java中的元素

sql - 等待操作超时。均价

c# - TcpClient.EndConnect 在套接字关闭时抛出 NullReferenceException

java - Jsoup 尝试测试 javascript 链接