我正在尝试使用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()
程序运行但调试器显示表变量null。我应该以其他方式这样做,还是我弄错了?
答案 0 :(得分:2)
如果您打印rawCities
,您很可能找不到任何代表标记<jquery-tablesorter>
的元素。因此,您应该从select
中删除它。
另一个问题是table.wikitable sortable
会尝试查找
<table class="wikitable">
...
<sortable>
...
</table>
不
<table class"wikitable sortable">...
要查找包含少量类的元素,请在每个类名之前使用.
运算符,例如element.class1.class2
而不是 space (描述祖先 - 子关系)element.class1 class2
。< / p>
所以你的代码可以简化为
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());