Java Jsoup getElementsByTag

Java Jsoup getElementsByTag,java,android,html,jsoup,Java,Android,Html,Jsoup,我正在为我的学校创建一个应用程序,以便更轻松地检查你上了什么课。我在使用他们的网站,但他们显然没有一个简单的API。所以我需要把网站读下来,把所有的东西都拆成碎片。(表的深层中的单个标记)。 这就是我目前正在使用的: doc.body().getElementsByTag("div").get(0).getElementsByTag("table").get(1).getElementsByTag("tbody").get(0).getElementsByTag("tr").get(1).get

我正在为我的学校创建一个应用程序,以便更轻松地检查你上了什么课。我在使用他们的网站,但他们显然没有一个简单的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

这是学校网站:

我无法复制和粘贴HTML,因为Stackoverflow的问题div将代码传输到站点,对不起。
感谢您已经花时间回复

我在HTML源代码中没有看到任何
tbody
,但您正在尝试访问它

删除所有
.getElementsByTag(“tbody”)。获取(0)
并重试


我刚检查过-我知道发生了什么

执行时-第二个表和第三行

doc.body().getElementsByTag(“div”).get(0).getElementsByTag(“表”).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>

3H1
马恩达格
丁斯达克
沃恩斯达格
星期四
维里达格
1e uur
**
**

您可以使用CSS选择器来实现这一点,这比您的方法更简单


doc.select(“body>div>table.maintables>tbody>tr:nth child(3)>td:nth child(2)>table>tbody>tr>td:nth child(1)>a”).html()
我在html源代码中没有看到任何
tbody
,但您正在尝试访问它

删除所有
.getElementsByTag(“tbody”)。获取(0)
并重试


我刚检查过-我知道发生了什么

执行时-第二个表和第三行

doc.body().getElementsByTag(“div”).get(0).getElementsByTag(“表”).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>

3H1
马恩达格
丁斯达克
沃恩斯达格
星期四
维里达格
1e uur
**
**

您可以使用CSS选择器来实现这一点,这比您的方法更简单


doc.select(“body>div>table.maintables>tbody>tr:nth child(3)>td:nth child(2)>table>tbody>tr>td:nth child(1)>a”).html()

@JMgamerZzzTM,您试图访问的文本是什么?没有工作,仍然有相同的错误我一部分一部分地破坏了代码,发现错误正好发生在这里:doc.body().getElementsByTag(“div”).get(0).getElementsByTag(“表格”).get(1).getElementsByTag(“tbody”).get(0).getElementsByTag(“tr”).get(2).getElementsByTag(“td”).get(0)。第二个表试图聚集的位置如果您转到该站点,您会在表选项卡中看到名称(快捷方式)、房间号和课程快捷方式。我正在尝试将它们全部放入按天/小时排序的数组中。按日期排序可以用java完成。我只需要修复一个错误,即它找不到实际存在的元素。您使用的浏览器是什么?我在google chrome上看不到它?@JMgamerZzzTM,您尝试访问的文本是什么?不起作用,仍然有相同的错误我一部分一部分地破坏了代码,发现错误会在这里发生:doc.body().getElementsByTag(“div”).get(0).getElementsByTag(“table”).get(1).getElementsByTag(“tbody”).get(0).getElementsByTag(“tr”).get(2).getElementsByTag(“td”).get(0)。第二个表试图聚集的位置如果您转到该站点,您会在表选项卡中看到名称(快捷方式)、房间号和课程快捷方式。我正在尝试将它们全部放入一个按天/小时排序的数组中。按日期排序可以用java完成。我只需要修复一个错误,即它找不到实际存在的元素。你在使用什么浏览器?我在google chrome上看不到它?