Java 如何使用Jsoup读取HTML表
我正在试着阅读来自城市的表格 我想要所有城市的名字,但是我被卡在了桌子里面 选择代码Java 如何使用Jsoup读取HTML表,java,jsoup,Java,Jsoup,我正在试着阅读来自城市的表格 我想要所有城市的名字,但是我被卡在了桌子里面 选择代码 Element table = rawCities.getElementById("content") .getElementById("bodyContent") .getElementById("mw-content-text") .select("table.wikitable sortable jqu
Element table = rawCities.getElementById("content")
.getElementById("bodyContent")
.getElementById("mw-content-text")
.select("table.wikitable sortable jquery-tablesorter").first()
`.select("tbody").first()`;
因此,该文档是在另一个类中用Jsoup.connect下载和解析的,在这里我试图获取城市名称。当我使用selects进行遍历时,我在这里得到一个NullPointerException。如果我去掉。选择(“tbody”).first()
程序运行,但调试器显示表变量null。我应该用另一种方式做这件事,还是我做错了什么?如果打印
rawCities
,很可能找不到任何表示标记
的元素。因此,您应该将其从选择中删除
另一个问题是table.wikitable sortable
将尝试查找
<table class="wikitable">
...
<sortable>
...
</table>
无论如何,如果您只想打印所选表格第一列的内容,可以使用
for (Element row : rawCities.select("table.wikitable.sortable td:eq(0) a")) {
System.out.println(row.text());
}
您还可以使用此循环将row.text()
的结果添加到先前创建的一些列表中,或者使用类似
List<String> names = rawCities
.select("table.wikitable.sortable td:eq(0) a")
.stream()
.map(e -> e.text())
.collect(Collectors.toList());
List name=rawcity
.选择(“table.wikitable.sortable td:eq(0)a”)
.stream()
.map(e->e.text())
.collect(Collectors.toList());
如果打印rawcity
,很可能找不到任何表示标签的元素
。因此,您应该将其从选择中删除
另一个问题是table.wikitable sortable
将尝试查找
<table class="wikitable">
...
<sortable>
...
</table>
无论如何,如果您只想打印所选表格第一列的内容,可以使用
for (Element row : rawCities.select("table.wikitable.sortable td:eq(0) a")) {
System.out.println(row.text());
}
您还可以使用此循环将row.text()
的结果添加到先前创建的一些列表中,或者使用类似
List<String> names = rawCities
.select("table.wikitable.sortable td:eq(0) a")
.stream()
.map(e -> e.text())
.collect(Collectors.toList());
List name=rawcity
.选择(“table.wikitable.sortable td:eq(0)a”)
.stream()
.map(e->e.text())
.collect(Collectors.toList());
jquery tablesorter的目的是什么?还要选择一些元素的许多类使用元素.class1.class2
,所以你的table.wikitable sortable
应该是table.wikitable.sortable
。哦,我不知道这一点。这就解决了问题!非常感谢你。我认为jquery tablesorter
是类名的一部分jquery tablesorter
的目的是什么?还要选择一些元素的许多类使用元素.class1.class2
,所以你的table.wikitable sortable
应该是table.wikitable.sortable
。哦,我不知道这一点。这就解决了问题!非常感谢你。我认为jquery tablesorter
是类名的一部分,那么我不需要.getElementById(“content”).getElementById(“bodyContent”).getElementById(“mw content text”)
来访问表?不,select
将尝试查找与CSS查询匹配的结果,即使它不直接位于祖先/父元素的顶层。它可以找到任何子代/后代。我怀疑您可能也不需要首先使用
。如果您想简单地迭代表中的所有行,可以使用类似于(元素行:rawCities.select(“table.wikitable.sortable tr”){…}
的东西。如果您想在其tr
父级中找到第一个td
,可以添加td:eq(0)
。更多信息是,我想在arraylist中添加所有城市名称。我试试看。感谢tipNo,它们将被多次使用。它是关于一个桌面应用程序的优化运输路线,不,我从来没有使用过流。他们能改进这里的代码吗?如果是这样,我将开始阅读,然后我不需要.getElementById(“内容”).getElementById(“bodyContent”).getElementById(“mw content text”)
来访问表?否,select
将尝试查找与CSS查询匹配的结果,即使它不直接位于祖先/父元素的顶层。它可以找到任何子代/后代。我怀疑您可能也不需要首先使用
。如果您想简单地迭代表中的所有行,可以使用类似于(元素行:rawCities.select(“table.wikitable.sortable tr”){…}
的东西。如果您想在其tr
父级中找到第一个td
,可以添加td:eq(0)
。更多信息是,我想在arraylist中添加所有城市名称。我试试看。感谢tipNo,它们将被多次使用。它是关于一个桌面应用程序的优化运输路线,不,我从来没有使用过流。他们能改进这里的代码吗?如果是这样的话,我就去看书