如何从Jsoup表中获取行

时间:2014-03-30 07:06:55

标签: html jsoup

我的表没有任何类或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吗?

1 个答案:

答案 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)元素。您可能已经想到了,这是equalless 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中的一些好读物!