如何使用Android中的Jsoup从嵌套div中提取表数据?

时间:2015-11-03 20:26:00

标签: android jquery jsoup

我试图提取" Prev。的值。关闭"来自finance.yahoo.com/q?s=[Symbol]

以下是HTML的内容,

 <div class="yui-u first yfi-start-content">
  <div class="yfi_quote_summary">
   <div id="yfi_quote_summary_data" class="rtq_table">
    <table id="table1">
     <tbody>
      <tr>
       <th scope="row" width="48%">Prev Close:</th>
       <td class="yfnc_tabledata1">208.25</td>
      </tr>
      <tr>
       <th scope="row" width="48%">Open:</th>
       <td class="yfnc_tabledata1">211.00</td>
      </tr>
      <tr>
       <th scope="row" width="48%">Bid:</th>
       <td class="yfnc_tabledata1">N/A</td>
      </tr>      
     </tbody>
    </table>
   </div>
  </div>

以下是我尝试提取所需数据的方式。

Document doc = Jsoup.connect("http://finance.yahoo.com/q?s=goog").get();
Elements e = doc.select("td.yfnc_tabledata1");
String close = e.get(0).text();

然而,这给出了一个IndexOutOfBoundsException,表示ArrayList的大小为0,因此e不能返回一个元素。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

在访问Elements之前,请确保它不为空。这样,您就可以避免IndexOutOfBoundsException。另外,正如@Hasanaga提到的那样,您应该设置userAgentreferrer标题。

Document doc = Jsoup
     .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") //
     .referrer("http://finance.yahoo.com") //
     .connect("http://finance.yahoo.com/q?s=goog") //
     .get();

Elements e = doc.select("td.yfnc_tabledata1");
if (e.isEmpty()) {
    throw new RuntimeException("Unable to locate table cell.");
}

String close = e.get(0).text();