Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Jsoup读取HTML表_Java_Jsoup - Fatal编程技术网

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,它们将被多次使用。它是关于一个桌面应用程序的优化运输路线,不,我从来没有使用过流。他们能改进这里的代码吗?如果是这样的话,我就去看书