使用Jsoup从HTML获取多个表

时间:2014-07-03 08:07:35

标签: java html jsoup

我正在尝试从此网站上的多个表格中抓取数据:http://www.national-autograss.co.uk/march.htm

我需要将表数据与它们各自的日期保持在h2中,所以我想要一种方法来执行以下操作:

  • 查找第一个日期标题h2
  • 在h2下提取表格数据(可以是多个表格)
  • 转到下一个标题并提取表等

我已编写代码来单独提取所有部分,但我不知道如何提取数据以使其保留相关的日期标题。

非常感谢任何帮助或指导。我开始使用的代码如下所示,但就像我说的那样,它正在迭代数据。

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class Main {

public static void main(String[] args) {

        Document doc = null;
        try {
            doc = Jsoup.connect("http://www.national-autograss.co.uk/march.htm").get();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Elements elementsTable1 = doc.select("#table1"); 
        Elements elementsTable2 = doc.select("#table2");
        Elements dateElements = doc.select("h2");

        for (int i = 0; i < dateElements.size(); i++) {
            System.out.println(dateElements.get(i).text());
            System.out.println(elementsTable1.get(i).text());
            System.out.println(elementsTable2.get(i).text());

        }

}
}

1 个答案:

答案 0 :(得分:2)

似乎您想要的值存储在<tr>内的表中,其中每个表中第一个子项为<h2>

<table align="center"><col width="200"><col width="150"><col width="100"><col width="120"><col width="330"><col width="300">
        <h2>Sunday 30 March</h2>
        <tr id="table1">
            <td><b>Club</b></td>
            <td><b>Venue</b></td>
            <td><b>Start Time</b></td>
            <td><b>Meeting Type</b></td>
            <td><b>Number of Days for Meeting</b></td>
            <td><b>Notes</b></td>

        </tr>
        <tr id="table2">
            <td>Evesham</td>
            <td>Dodwell</td>
            <td>11:00am</td>
            <td>RO</td>
            <td>Single Days Racing</td>
            <td></td>
        </tr>
</table>

我的建议是你搜索所有的桌子,当第一个孩子是h2时,你对其他孩子做了一些事情:

Elements tables = doc.select("table");
for(Element table : tables) {
    if(table.child(0).tagName().equals("h2")) {
        Elements children = table.children()
    }
}

希望这有帮助!

编辑:您希望删除<col>之前的所有<h2>,因为它们会出现在它之前(之前没有注意到这一点):

for(Element element : doc.select("col"))
{
    element.remove();
}