2014-10-18 117 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