我正在使用JSoup进行网页报废。我有一个类名为.chart
的表,其中包含行(tr),行包含数据(td)。但是有些tds里面还有包含行和tds的表。这是这些问题之一的形式:
<td align="center" onmouseout="hideAlt(104692)" onmouseover="showAlt(104692)">
21
<div id="as104692" class="altsrc" style="height: 32px; top: 308px; left: 622px; display: none;">
<b>Alt Src Locations</b>
<br>
<table class="none" border="0">
<tbody>
<tr>
<td>Lisac's Tire Butte</td>
<td align="right">21</td>
</tr>
</tbody>
</table>
</div>
这就是我获取数据的方式:
Elements e = manuf.select("table.chart tr");
for(Element el : e) {
Elements columns = el.select("td");
for(Element c : columns) {
System.out.print(c.text() + ", ");
}
}
这是我得到的结果:21 Alt Src地点Lisac的轮胎比尤特21 这就是我想要的结果:21
我如何告诉程序只接受第一个td并且不能将它们放在里面?
答案 0 :(得分:1)
使用ownText()
和immediate child
选择器
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Main {
public static void main(String[] args) {
try {
String html = "<table class=\"chart\">" +
"<tr>" +
"<td align=\"center\" onmouseout=\"hideAlt(104692)\" onmouseover=\"showAlt(104692)\">" +
"21" +
"<div id=\"as104692\" class=\"altsrc\" style=\"height: 32px; top: 308px; left: 622px; display: none;\">" +
"<b>Alt Src Locations</b>" +
"<br>" +
"<table class=\"none\" border=\"0\">" +
"<tbody>" +
"<tr>" +
"<td>Lisac's Tire Butte</td>" +
"<td align=\"right\">21</td>" +
"</tr>" +
"</tbody>" +
"</table>" +
"</div>" +
"</td>" +
"</tr>" +
"</table>";
Document doc = Jsoup.parse(html);
Elements els = doc.select("table.chart>tbody>tr>td");
for(Element el: els)
System.out.println(el.ownText());
} catch (Exception e) {
e.printStackTrace();
}
}
}