簡體   English   中英

使用 Jsoup 從 HTML 表中提取數據

[英]Extract data from HTML table with Jsoup

我想從此表中提取信息:

在此處輸入圖像描述

此表的 HTML 代碼:

<tr>
 <th>Rank</th>
 <th>Level</th>
 <th>IVs (A/D/S)</th>
 <th>CP</th>
 <th class="hidden-sm">Att</th>
 <th class="hidden-sm">Def</th>
 <th class="hidden-sm">Sta</th>
 <th class="hidden-xs">Stat Product</th>
 <th>% Max Stat</th>
</tr>
<tr class="table-danger">
 <td><b>2997</b></td>
 <td>19.0</td>
 <td>12 / 0 / 5</td>
 <td>1496</td>
 <td class="hidden-sm">128.10</td>
 <td class="hidden-sm">101.90</td>
 <td class="hidden-sm">133</td>
 <td class="hidden-xs">1736099</td>
 <td>93.71%</td>
</tr>
<tr>
 <td>1</td>
 <td>19.0</td>
 <td>0 / 14 / 14</td>
 <td>1498</td>
 <td class="hidden-sm">121.11</td>
 <td class="hidden-sm">110.05</td>
 <td class="hidden-sm">139</td>
 <td class="hidden-xs">1852687</td>
 <td>100.00%</td>
</tr>
...

我只能使用以下代碼獲取此表和行:

Element table = document.select("table").get(0);
Elements rows = table.select("tr");

如何提取這些統計數據? 它應該是:

Rank(2997) | Level (19.0) | IVs (12/0/5) | CP (1496)...

Elements td = rows.select("td");
String stats = td.text();

我會得到一行字符串: 2997 19.0 12 / 0 / 5 1496 128.10 101.90 133 1736099 93.71% 1 19.0 0...而且很難處理信息。

我想,我需要將它們存儲為帶有這些字段的 Stat object 並將其放入 Arraylist 或 smth 中。

但首先,我需要更順利地提取這些數據,並且不要將所有內容放在一條線上。 我需要 Jsoup 的力量。

你在正確的軌道上,但沒有到達終點。 Elements 是可以循環的常規 ArrayList。
讓我們編寫 class Stat。 這個 class 的對象將存儲每一行的數據。 您還可以為您的業務邏輯編寫 getter、setter 和其他方法:

public class Stat {
    private String rank;
    private String level;
    private String ivs;
    private String cp;
    private String att;
    private String def;
    private String sta;
    private String statProduct;
    private String maxStat;

    public Stat(String rank, String level, String ivs, String cp, String att, String def, String sta, String statProduct, String maxStat) {
        this.rank = rank;
        this.level = level;
        this.ivs = ivs;
        this.cp = cp;
        this.att = att;
        this.def = def;
        this.sta = sta;
        this.statProduct = statProduct;
        this.maxStat = maxStat;
    }

    @Override
    public String toString() {
        return "Stat{" +
                "rank='" + rank + '\'' +
                ", level='" + level + '\'' +
                ", ivs='" + ivs + '\'' +
                ", cp='" + cp + '\'' +
                ", att='" + att + '\'' +
                ", def='" + def + '\'' +
                ", sta='" + sta + '\'' +
                ", statProduct='" + statProduct + '\'' +
                ", maxStat='" + maxStat + '\'' +
                '}';
    }
}

它仍然只循環遍歷數組。 繼續您的代碼:

Elements rows = table.select("tr");

            for (int i = 0; i < rows.size(); i++) {
                Element row = rows.get(i);
                Elements td = t.getAllElements();
                Stat stat = new Stat(
                        td.get(1).text(),
                        td.get(2).text(),
                        td.get(3).text(),
                        td.get(4).text(),
                        td.get(5).text(),
                        td.get(6).text(),
                        td.get(7).text(),
                        td.get(8).text(),
                        td.get(9).text()
                );
                
                System.out.println(stat);
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM