如何使用JSoup打印此HTML表的内容?

时间:2018-11-25 13:34:56

标签: java web-scraping jsoup

首先,我要指出的是,使用HTML和JSoup进行处理对我来说是非常陌生的,因此,如果遇到一个愚蠢的问题,我表示歉意。

我想用代码来实现的目的是以这种形式为每个条目将链接https://www.stormshield.one/pve/stats/daviddean/sch上的表中的内容打印到控制台中:

启动器 50 年级年级年级年级年级 15%冲击力 42%装弹速度 15%反击 42%装弹速度 15%冲击力 42%耐久性

我的主要问题是为表和行提供正确的名称,一旦我能做到,格式化对我来说实际上不是问题。

这是我尝试使用的代码,无济于事:

    public static void main(String[] args) throws IOException {

    Document doc = Jsoup.connect("https://www.stormshield.one/pve/stats/daviddean/sch").get();

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

}

1 个答案:

答案 0 :(得分:1)

您需要找到表格元素,即表头和行。

请注意,它并不总是first()元素,我将其添加为示例。

这是您需要做的:

Document doc = null;
try {
    doc = Jsoup.connect("https://www.stormshield.one/pve/stats/daviddean/sch").get();
} catch (IOException e) {
    e.printStackTrace();
}

Element table = doc.body().getElementsByTag("table").first();

Element thead = table.getElementsByTag("thead").first();

StringBuilder headBuilder = new StringBuilder();

for (Element th : thead.getElementsByTag("th")) {
    headBuilder.append(th.text());
    headBuilder.append(" ");
}

System.out.println(headBuilder.toString());

Element tbody = table.getElementsByTag("tbody").first();

for (Element tr : tbody.getElementsByTag("tr")) {
    StringBuilder rowBuilder = new StringBuilder();

    for (Element td : tr.getElementsByTag("td")) {
        rowBuilder.append(td.text());
        rowBuilder.append(" ");
    }
    System.out.println(rowBuilder.toString());
}

输出为:

enter image description here