1

我正在使用 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");
            }
        }
4

2 回答 2

1

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

        Connection conn = Jsoup.connect(str);
        conn.timeout(300000); //5 minutes
        Document doc = conn.get();
于 2012-10-20T03:35:41.007 回答
0

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

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

参数:

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

回报:

this Connection, for chaining

来源:jsoup API

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

于 2012-10-20T03:32:36.113 回答