[英]How to read an HTML table with Jsoup
我正在尝试从这里与城市一起阅读桌子
至关重要,我想要所有城市的名称,但我只能停留在桌子内部。
选择代码。
Element table = rawCities.getElementById("content")
.getElementById("bodyContent")
.getElementById("mw-content-text")
.select("table.wikitable sortable jquery-tablesorter").first()
`.select("tbody").first()`;
因此,该文档已下载并在另一个类中与Jsoup.connect一起解析,在这里我试图获取城市名称。 当我遍历选择时,我在这里得到NullPointerException。 如果我摆脱了.select("tbody").first()
程序运行,但调试器显示表变量为null。 我应该以其他方式这样做还是我做错了什么?
如果您打印rawCities
,则很可能找不到任何表示标签<jquery-tablesorter>
元素。 因此,您应该将其从select
删除。
另一个问题是table.wikitable sortable
将尝试查找
<table class="wikitable">
...
<sortable>
...
</table>
不
<table class"wikitable sortable">...
要查找很少类的元素,请使用.
每个类名前面的运算符,例如element.class1.class2
不要空格 (描述祖先与孩子的关系) element.class1 class2
。
因此您的代码可以简化为
Element table = rawCities
.select("table.wikitable.sortable tbody")
.first();
无论如何,如果您只想打印所选表的第一列的内容,则可以使用
for (Element row : rawCities.select("table.wikitable.sortable td:eq(0) a")) {
System.out.println(row.text());
}
您还可以使用此循环将row.text()
结果添加到先前创建的某些List<String>
或使用类似以下的代码
List<String> names = rawCities
.select("table.wikitable.sortable td:eq(0) a")
.stream()
.map(e -> e.text())
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.