2012-10-20 64 views
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"); 
      } 
     } 

回答

1

更新這一行Document doc = Jsoup.connect(str).get();,設置超時時間爲:

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

@LaviniaTomole - 你也嘗試了上述以及?如果是,得到相同的錯誤? –

+0

我現在正在嘗試..到目前爲止它正在工作......但對於1500郵政編碼,我需要一段時間......我會讓你知道....謝謝你! – Lavinia

+0

雖然你可以設置超時時間,對吧? –

0

連接康恩= 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分鐘。

+0

我試圖修改代碼:Connection.timeout(300000);(我要5分鐘),我有錯誤「的方法,超時(詮釋)是未定義的類型連接「 – Lavinia