我正在为我的学校创建一个应用程序,以便更容易地检查您上了什么课。我使用他们的网站,但他们显然没有一个简单的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()文档= 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将代码转移到站点,对不起。
谢谢你能给我时间回复
发布于 2016-03-03 00:24:16
我在HTML源代码中没有看到任何tbody,但是您正在尝试访问它。
删除所有.getElementsByTag("tbody").get(0)并尝试。
我刚查过了-我知道发生了什么!
当它被执行时-2表和3排
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()
https://stackoverflow.com/questions/35760766
复制相似问题