[英]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.