Извлечь данные из таблицы HTML с помощью Jsoup - PullRequest
0 голосов
/ 08 июля 2020

Я хочу извлечь информацию из этой таблицы:

enter image description here

HTML code for this table:


 Rank
 Level
 IVs (A/D/S)
 CP
  Att  Защита  Sta  Статистика продукта  % Макс.стат    2997  19,0  12/0/5  1496  128,10  101,90  133  1736099  93,71%    1  19,0  0/14/14  1498  121,11  110,05  139  1852687  100.00%   ... 

Я могу получить эту таблицу и строки только с этим кодом:

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 с этими полями и поместить в Arraylist или что-то в этом роде.

Но во-первых, мне нужно извлечь эти данные более плавно и не помещать все в одной строке. Мне нужна сила Jsoup.

1 Ответ

1 голос

Вы были на верном пути, но не дошли до конца. Elements - это обычный список ArrayList, который можно перебирать. Напишем класс Stat. Объекты этого класса будут хранить данные каждой строки. Вы также можете написать геттеры, сеттеры и другие методы для вашего бизнеса. Logi c:

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 + '\'' +
                '}';
    }
}

Осталось только l oop через массив. Продолжение вашего кода:

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);
            }
...