2012-02-20 513 views
0

我正在使用jsoup從網站中的表中提取數據。 http://www.moneycontrol.com/stocks/marketstats/gainerloser.php?optex=BSE&opttopic=topgainers&index=-1使用Jsoup。我提到Using JSoup To Extract HTML Table Contents和其他類似的問題,但它不打印數據。有人可以請我提供實現此目標所需的代碼嗎?使用Jsoup提取數據

public class TestClass 
{ 


public static void main(String args[]) throws IOException 
{ 
Document doc = Jsoup.connect("http://www.moneycontrol.com/stocks/marketstats/gainerloser.php?optex=BSE&opttopic=topgainers&index=-1").get(); 

    for (Element table : doc.select("table.tablehead")) { 
     for (Element row : table.select("tr")) { 
      Elements tds = row.select("td"); 
      if (tds.size() > 6) { 
       System.out.println(tds.get(0).text() + ":" + tds.get(1).text()); 
      } 
     } 
    } 
+1

這可能有助於查看您的代碼以幫助您。 .. – quaylar 2012-02-20 09:30:59

+0

[使用條款](http://www.moneycontrol.com/cdata/termsofuse.php)表明,未經moneycontrol.com明確書面許可,不得允許此類行爲。如果您有權限,請向他們詢問關於訪問數據的首選API(由他們組織)。例如。我注意到其中一個鏈接提到RSS提要。這是比HTML更「機器友好」的信息形式。 – 2012-02-20 09:39:30

+0

我想獲得表格中漲幅居前的名字。我不得不稍微調整代碼,但不知道我必須做什麼,因爲我是jsoup的新手。 – user1092042 2012-02-20 13:00:17

回答

1

如果你想獲得表(不是頭)的內容,則需要更改表的選擇:

for (Element table : doc.select("table.tbldata14")) 

,而不是

for (Element table : doc.select("table.tablehead")) 
+0

它給了我一個索引超出界限的異常,並說數組列表的大小爲0. – user1092042 2012-02-21 04:14:28

+0

嗯,奇怪。重新檢查你的代碼,並在選擇器字符串中嘗試「table.bdrtpg」。 – vacuum 2012-02-21 08:15:23

+0

你也可以嘗試'doc.select(「div.FL」)' – vacuum 2012-02-21 08:18:49

0

一個重要的事情是要檢查你在解析HTML時看到的是什麼,因爲它可能會有幾個問題: 1.網站可能使用iframe s顯示內容 2.通過Javascript顯示內容 3.少數站點具有不允許jsoup解析的腳本,因此doc元素將包含隨機數據