2014-10-18 180 views
0

我期待從使用jSoup的http://www.sportinglife.com/greyhounds/abc-guide表中獲取數據。我想將這些數據放入我的Java程序中的某種表中,然後可以在我的代碼中使用它。使用jSoup從表中獲取數據

我不太確定如何做到這一點。我一直在玩jSoup,現在可以從表格中的每個單元格中使用while循環打印出來 - 但顯然不能使用它,因爲表格中的單元格數量會發生變化。

Document doc = Jsoup.connect("http://www.sportinglife.com/greyhounds/abc-guide").get(); 
    int n = 0; 
    while (n < 100){ 
    Element tableHeader = doc.select("td").get(n); 


    for(Element element : tableHeader.children()) 
    { 
     // Here you can do something with each element 
     System.out.println(element.text()); 
    } 
    n++; 
    } 

任何想法,我怎麼能做到這一點?

+0

使用'何時爲什麼u需要列數(元元:tableHeader.children())'? – blackSmith 2014-10-18 09:42:13

回答

0

只有幾件事情需要實現才能實現您的目標。就拿這個Groovy腳本來看看 - https://gist.github.com/wololock/568b9cc402ea661de546現在,讓我們解釋一下我們這裏有

List<Element> rows = document.select('table[id=ABC Guide] > tbody > tr') 

這裏我們指定我們感興趣的每一行tr在爲tbody直接子這與ID的table直接子ABC Guide。作爲回報,您將收到描述那些tr行的Element對象列表。

Map<String, String> data = new HashMap<>() 

我們會將我們的結果存儲在一個簡單的散列圖中,以便進一步評估。把這些被刮取的數據放入數據庫中。

for (Element row : rows) { 
    String dog = row.select('td:eq(0)').text() 
    String race = row.select('td:eq(1)').text() 

    data.put(dog, race) 
} 

現在,我們遍歷每個Element,我們選擇內容來自第一小區文本:String dog = row.select('td:eq(0)').text(),我們重複此步驟檢索內容來自第二小區的文本:String race = row.select('td:eq(1)').text()。然後我們只是簡單地將這些數據放入哈希映射中。就這樣。

我希望這個提供了描述的例子能幫助你開發你的應用程序。

編輯:

Java代碼示例 - https://gist.github.com/wololock/8ccbc6bbec56ef57fc9e

+0

謝謝你,看起來正是我需要的。但是,有一個問題,我如何將它實現到我的Java項目中?我不確定什麼「Groovy」是... – 2014-10-18 09:50:08

+0

我添加了一個Java代碼示例 - https://gist.github.com/wololock/8ccbc6bbec56ef57fc9e這個'assert!data.isEmpty()'只是一個斷言,檢查如果地圖上有一些數據 - 你應該在你的代碼中刪除這一行。 – 2014-10-18 09:54:49

+0

非常感謝你Szymon ...完美的工作!有一個美好的一天:) – 2014-10-18 09:56:36