无法使用 Jsoup 获取重复的标签
can't get duplicated tags using Jsoup
我正在使用 Jsoup
解析 .html
文件。
我得到了一个 <tr>
标签。
此 <tr>
标签包含以下内容:
<tr height="40" align="center">
<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
</tr>
我需要上面的每个 <td>
标签。
所以,我尝试使用 Elements.selector()
的代码是这样的:
String str;
int size;
// ...
Elements elems; // it has <tr> tag above.
// ...
str = elems.select("td").toString();
size = elems.select("td").size();
所以我认为现在 size
应该是 9
并且 str
应该具有以下值:
<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
但是,当我编译这段代码时,
size
是 4
而 str
如下所示:
<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
我认为重复的 <td>
标签已删除...
我不明白。我需要所有 <td>
标签。
我是不是做错了什么?
On https://blog.tallan.com/2012/07/26/parsing-html-using-jsoup-library/ 是一种获取 table:
的所有行的方法
Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/List_of_blogs").get();
[...]
Elements trs = doc.select("table.wikitable tr");
table 表示我们想要‘select a table’, .意思是'with CSS class named',wikitable实际上标识了我们正在寻找的CSS class, 并且“tr”表示“然后获取所有 table 行。”
这里是对大多数 select 的概述:
http://jsoup.org/cookbook/extracting-data/selector-syntax
看起来 problem/bug 在 Elements
(复数)持有 tr
上调用 select("td")
时出现,但在 Element
上调用 select("td")
时它会消失(单数)表示单个tr
。
因此,如果您只有一个 tr
,您可以简单地选择 first()
Element
和 select("td")
。
str = elems.first().select("td").toString();
size = elems.first().select("td").size();
如果有更多 tr
像
一样遍历所有这些
for (Element tr : elems){
//^^^^^^^^^^ - element holding single tr
Elements tds = tr.select("td");
System.out.println(tds);
System.out.println("---------");
System.out.println(tds.size());
}
当我们调用 select("tr td")
而不是 select("tr").select("td")
时,问题也会消失(在这两种情况下,我们都试图从所有 tr
中 select 所有 td
) .
我正在使用 Jsoup
解析 .html
文件。
我得到了一个 <tr>
标签。
此 <tr>
标签包含以下内容:
<tr height="40" align="center">
<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
</tr>
我需要上面的每个 <td>
标签。
所以,我尝试使用 Elements.selector()
的代码是这样的:
String str;
int size;
// ...
Elements elems; // it has <tr> tag above.
// ...
str = elems.select("td").toString();
size = elems.select("td").size();
所以我认为现在 size
应该是 9
并且 str
应该具有以下值:
<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td align="center" class="small"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
但是,当我编译这段代码时,
size
是 4
而 str
如下所示:
<td class="small" style="padding-top: 5px;" bgcolor="#f1f1f1"><strong>Data1</strong><span class="small1"><br>time1</span></td>
<td align="center" class="small"> </td>
<td align="center" class="small" bgcolor="#eeeeee" rowspan="2"> </td>
<td class="small" style="padding-top: 5px;" bgcolor="#eeeeee" rowspan="2"><strong>Data2</strong><span class="small1"><br>time2</span></td>
我认为重复的 <td>
标签已删除...
我不明白。我需要所有 <td>
标签。
我是不是做错了什么?
On https://blog.tallan.com/2012/07/26/parsing-html-using-jsoup-library/ 是一种获取 table:
的所有行的方法Document doc = Jsoup.connect("http://en.wikipedia.org/wiki/List_of_blogs").get();
[...]
Elements trs = doc.select("table.wikitable tr");
table 表示我们想要‘select a table’, .意思是'with CSS class named',wikitable实际上标识了我们正在寻找的CSS class, 并且“tr”表示“然后获取所有 table 行。”
这里是对大多数 select 的概述: http://jsoup.org/cookbook/extracting-data/selector-syntax
看起来 problem/bug 在 Elements
(复数)持有 tr
上调用 select("td")
时出现,但在 Element
上调用 select("td")
时它会消失(单数)表示单个tr
。
因此,如果您只有一个 tr
,您可以简单地选择 first()
Element
和 select("td")
。
str = elems.first().select("td").toString();
size = elems.first().select("td").size();
如果有更多 tr
像
for (Element tr : elems){
//^^^^^^^^^^ - element holding single tr
Elements tds = tr.select("td");
System.out.println(tds);
System.out.println("---------");
System.out.println(tds.size());
}
当我们调用 select("tr td")
而不是 select("tr").select("td")
时,问题也会消失(在这两种情况下,我们都试图从所有 tr
中 select 所有 td
) .