【问题标题】:Exceptions while I am extracting data from a Web site从网站提取数据时出现异常
【发布时间】:2023-03-09 04:31:02
【问题描述】:

我正在使用 Jsoup 从网站按邮政编码提取数据。邮政编码是从文本文件中读取的 结果写入控制台。我有大约 1500 个邮政编码。程序抛出两种异常:

org.jsoup.HttpStatusException: HTTP error fetching URL. Status=500, URL=http://www.moving.com/real-estate/city-profile/...

java.net.SocketTimeoutException: Read timed out

我认为解决方案是当时只读取少量数据。因此,我使用计数器从文本文件中计算 200 个邮政编码,并在获得 200 个邮政编码的数据后停止程序 5 分钟。 正如我所说,我仍然有例外。到目前为止,当我看到异常时,我复制粘贴了可用数据,然后我继续使用以下邮政编码。 但我想不间断地读取所有数据。 这可能吗?任何提示将不胜感激。提前谢谢!

这是我读取所有数据的代码:

    while (br.ready())
        {
            count++;

            String s = br.readLine();
            String str="http://www.moving.com/real-estate/city-profile/results.asp?Zip="+s; 
            Document doc = Jsoup.connect(str).get();

            for (Element table : doc.select("table.DataTbl"))
            {
                for (Element row : table.select("tr")) 
                {
                    Elements tds = row.select("td");
                    if (tds.size() > 1)
                    {
                        if (tds.get(0).text().contains("Per capita income"))
                            System.out.println(s+","+tds.get(2).text());
                    }
                }
            }
            if(count%200==0)
            {
                Thread.sleep(300000);
                System.out.println("Stoped for 5 minutes");
            }
        }

【问题讨论】:

    标签: java exception html-parsing jsoup


    【解决方案1】:

    更新此行Document doc = Jsoup.connect(str).get(); 将超时设置为:

            Connection conn = Jsoup.connect(str);
            conn.timeout(300000); //5 minutes
            Document doc = conn.get();
    

    【讨论】:

    • @LaviniaTomole - 你也尝试过上述方法吗?如果是,是否出现同样的错误?
    • 我现在正在尝试......到目前为止它正在工作......但是对于 1500 个邮政编码,我需要一段时间......我会告诉你......谢谢!跨度>
    • 提取 700 次后出现错误“org.jsoup.HttpStatusException: HTTP error fetching URL.Status=500, URL=moving.com/real-estate/city-profile/results.asp?Zip=629..”。
    • 将超时时间增加到 10 或 15 分钟并减少线程睡眠,如果您仍在使用它,然后尝试。应该有帮助。
    • 如果我不使用 sleep(),你认为这是个好主意吗?我认为问题是通过设置超时来解决的,对吧?我想象了这些变化,我又在等待 :)
    【解决方案2】:

    连接连接 = Jsoup.connect(str); conn.timeout(0); /无限超时

    设置请求超时(连接和读取)。如果发生超时,则 将抛出 IOException。默认超时为 3 秒(3000 毫)。 超时为零被视为无限超时。

    参数:

    millis - number of milliseconds before timing out connects or reads.
    

    返回:

    this Connection, for chaining
    

    Source: jsoup API

    将超时设置为零。这样你就不用停 5 分钟了。

    【讨论】:

    • 我尝试修改代码:Connection.timeout(300000);(我想要 5 分钟)并且我有错误“方法 timeout(int) 未定义类型 Connection”
    猜你喜欢
    • 2011-06-19
    • 2018-10-09
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多