Jsoup getElementsByTag

时间:2016-03-03 00:13:13

标签: java android html jsoup

我正在为我的学校创建一个应用程序,以便更轻松地查看您的课程。即时通讯使用他们的网站,但他们似乎没有一个简单的API。所以我需要喜欢阅读网站,并将所有内容分成几部分。 (表格层深的单个标签) 所以这就是我目前使用的:

doc.body().getElementsByTag("div").get(0).getElementsByTag("table").get(1).getElementsByTag("tbody").get(0).getElementsByTag("tr").get(1).getElementsByTag("td").get(0).getElementsByTag("table").get(0).getElementsByTag("tbody").get(0).getElementsByTag("tr").get(0).getElementsByTag("td").get(0).getElementsByTag("a").get(0).html()

doc = Jsoup解析文档。
对于这个代码它可以正常工作,但只要我尝试这个:

doc.body().getElementsByTag("div").get(0).getElementsByTag("table").get(1).getElementsByTag("tbody").get(0).getElementsByTag("tr").get(2).getElementsByTag("td").get(0).getElementsByTag("table").get(0).getElementsByTag("tbody").get(0).getElementsByTag("tr").get(0).getElementsByTag("td").get(0).getElementsByTag("a").get(0).html()

它会返回错误。

03-02 11:30:14.239  15253-15280/? D/JM﹕ Stack [1]: java.util.ArrayList.get(ArrayList.java:308)
03-02 11:30:14.239  15253-15280/? D/JM﹕ Stack [2]: com.jmtech.jordi.mwc.BackgroundWorker.update_r_n(BackgroundWorker.java:374)
03-02 11:30:14.239  15253-15280/? D/JM﹕ Stack [3]: com.jmtech.jordi.mwc.BackgroundWorker.access$500(BackgroundWorker.java:54)
03-02 11:30:14.239  15253-15280/? D/JM﹕ Stack [4]: com.jmtech.jordi.mwc.BackgroundWorker$UpdateRaster_Raster_Notify.run(BackgroundWorker.java:355)
03-02 11:30:14.239  15253-15280/? D/JM﹕ Stack [5]: java.util.Timer$TimerImpl.run(Timer.java:284)
03-02 11:30:14.239  15253-15280/? D/JM﹕ java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0


这是学校网站:http://maaswaal.roosternet.nl/?les=3H1
我无法复制和粘贴HTML,因为Stackoverflow的问题div将代码传输到网站,抱歉。
感谢您抽出时间回复

1 个答案:

答案 0 :(得分:4)

我在HTML源代码中看不到任何tbody - 但您正尝试尝试访问它。

删除所有.getElementsByTag("tbody").get(0)并尝试。

我刚刚检查过 - 我明白了发生了什么!

执行时 - 第二表和第三行

doc.body().getElementsByTag("div").get(0).getElementsByTag("table").get(1).getElementsByTag("tr").get(2)

返回**之间突出显示的部分。因为有tr标记。它不会为您提供同一级别的所有行。

<table class="maintableles">
        <tr>
           <th>3H1</th>
           <th class="lesdagen">maandag</th>
           <th class="lesdagen">dinsdag</th>
           <th class="lesdagen">woensdag</th>
           <th class="lesdagen">donderdag</th>
           <th class="lesdagen">vrijdag</th>
        </tr>
        <tr>
           <th class="lesuren">
              <div class="lesurendiv">1e uur</div>
           </th>
           <td>
              <table>
                 **<tr>
                    <td><a href="?les=BRS">BRS</a></td>
                    <td><a title="rekenen">rek</a></td>
                    <td align="right"><a href="?les=V110">V110</a></td>
                 </tr>**
              </table>
           </td>
           <td>

你可以使用CSS选择器,这比你的方法更容易!!。

doc.select("body > div > table.maintableles > tbody > tr:nth-child(3) > td:nth-child(2) > table > tbody > tr > td:nth-child(1) > a").html()