我正在尝试读取 here 中的城市表
基本我想要所有城市名称,但我被困在我遍历到表格内部的部分。
选择代码。
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()
程序运行但调试器显示表变量为空。我应该以其他方式这样做还是我做错了什么?
最佳答案
如果您打印 rawCities
您很可能找不到任何代表标签 <jquery-tablesorter>
的元素。因此,您应该将其从 select
中删除。 。
另一个问题是table.wikitable sortable
将尝试寻找
<table class="wikitable">
...
<sortable>
...
</table>
不是
<table class"wikitable sortable">...
要查找具有很少类的元素,请使用 .
每个类名之前的运算符,如 element.class1.class2
不是空间(描述祖先- child 关系)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());
关于java - 如何使用 Jsoup 读取 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391634/