我的表没有任何类或id(页面上有更多表),具有以下结构:
<table cellpadding="2" cellspacing="2" width="100%">
...
<tr>
<td class="cell_c">...</td>
<td class="cell_c">...</td>
<td class="cell_c">...</td>
<td class="cell">SOME_ID</td>
<td class="cell_c">...</td>
</tr>
...
</table>
我想只获得一行,其中包含<td class="cell">SOME_ID</td>
,而SOME_ID是一个参数。
UPD。 目前我正在这样做:
doc = Jsoup.connect("http://www.bank.gov.ua/control/uk/curmetal/detail/currency?period=daily").get();
Elements rows = doc.select("table tr");
Pattern p = Pattern.compile("^.*(USD|EUR|RUB).*$");
for (Element trow : rows) {
Matcher m = p.matcher(trow.text());
if(m.find()){
System.out.println(m.group());
}
}
但是,如果大部分工作都是由regexp完成的,为什么我需要Jsoup?要下载HTML吗?
答案 0 :(得分:1)
如果您的通用HTML结构始终相同,并且您希望某个特定元素没有可以使用的唯一ID或标识符属性,则可以使用Jsoup中的css选择器语法指定DOM中的位置-tree你所追求的元素。
考虑这个HTML源代码:
<html>
<head></head>
<body>
<table cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td class="cell">I don't want this one...</td>
<td class="cell">Neither do I want this one...</td>
<td class="cell">Still not the right one..</td>
<td class="cell">BINGO!</td>
<td class="cell">Nothing further...</td>
</tr> ...
</tbody>
</table>
</body>
</html>
我们想要从第四个<td>
元素中选择并解析文本。
我们指定要使用<td>
选择DOM树中具有索引3的td:eq(3)
元素。同样,我们可以使用<td>
选择索引3之前的所有td:lt(3)
元素。您可能已经想到了,这是equal
和less than
。
如果不使用first()
,您将获得Elements
个对象,但我们只想要第一个,因此我们指定了它。我们也可以使用get(0)
。
所以,以下代码
Element e = doc.select("td:eq(3)").first();
System.out.println("Did I find it? " + e.text());
将输出
Did I find it? BINGO!
Jsoup cookbook中的一些好读物!