2013-02-15 153 views
0

我試圖從網站獲取數據。使用此代碼:如何使用Jsoup從網站獲取內容

@WebServlet(description = "get content from teamforge", urlPatterns = { "/JsoupEx" }) 
public class JsoupEx extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    private static final String URL = "http://www.moving.com/real-estate/city-profile/results.asp?Zip=60505"; 

    public JsoupEx() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     Document doc = Jsoup.connect(URL).get(); 
     for (Element table : doc.select("table.DataTbl")) { 
      for (Element row : table.select("tr")) { 
       Elements tds = row.select("td"); 
       if (tds.size() > 1) { 
        System.out.println(tds.get(0).text() + ":" 
          + tds.get(2).text()); 
       } 
      } 
     } 
    } 
} 

我正在使用jsoup解析器。運行時,我不會有任何錯誤,只是沒有輸出。

請幫忙。

+0

猜猜別人會需要更多的洞察力!如果您沒有收到任何錯誤,請提供信息,比如您如何嘗試運行該程序。 – LGAP 2013-02-15 09:10:01

+1

您的程序中的網址不起作用。該頁面不包含表格。 – CharliePrynn 2013-02-15 09:10:53

+0

你確定你的servlet正在部署成功嗎?檢查您的服務器日誌是否有錯誤,並在發現問題時將其包含在您的問題中 – Perception 2013-02-15 09:11:16

回答

4

用下面的代碼

public class Tester { 
    private static final String URL = "http://www.moving.com/real-estate/city-profile/results.asp?Zip=60505"; 


    public static void main(String[] args) throws IOException { 
     Document doc = Jsoup.connect(URL).get(); 
     System.out.println(doc); 

    } 

} 

我得到一個java.net.SocketTimeoutException:讀超時。我認爲您試圖抓取的特殊網址對於Jsoup來說太慢了。在歐洲,我的聯繫可能會比你慢。但是,您可能想要在AS的日誌中檢查此異常。

通過超時設置爲10秒,我就可以下載並解析文檔:

Connection connection = Jsoup.connect(URL); 
connection.timeout(10000); 
Document doc = connection.get(); 
System.out.println(doc); 

隨着你的代碼的其餘部分,我得到:

人口:78413

人口自1990年以來的變化:53.00%

人口密度:6,897

男:41137

女:37278

.....

0

感謝名單朱利安,我試着用下面的代碼,讓SocketTimeoutException。和代碼是

Connection connection=Jsoup.connect("http://www.moving.com/real-estate/city- 
profile/results.asp?Zip=60505"); 
connection.timeout(10000); 
Document doc = connection.get(); 
System.out.println(doc);