有一个website,我试图从JSoup库中获取信息。问题在于响应中仅页面的一部分。
这是我的代码:
Connection.Response loginForm = Jsoup.connect(
String.format("https://student.utm.utoronto.ca/timetable/timetable?yos=%s&session=20199", i))
.userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36")
.method(Connection.Method.GET)
.timeout(600000)
.header("Accept-Encoding", "gzip, deflate, br")
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
.header("Accept-Language", "en-US,en;q=0.9,fr;q=0.8")
.header("Cache-Control","max-age=0")
.header("Connection", "keep-alive")
.header("Host", "student.utm.utoronto.ca")
.header("Sec-Fetch-Mode","navigate")
.execute();
我尝试从浏览器的请求标头中复制尽可能多的标头。
我怀疑最初加载页面后运行了javascript,这就是为什么我没有在响应中得到完整页面的原因。
这是带有tr
标签的最后一个元素:
<tr id="tr_MAT102H5FTUT0125" class=" TUT W1 meeting_section OL0 todAft">
<td> </td>
<td> <label for="MAT102H5FTUT0125">TUT0125</label> </td>
<td class="instrTD"> </td>
<td class="hideEnrolTD"> 29 </td>
<td class="hideEnrolTD"> 35 </td>
<td class="hideEnrolTD"> 0 </td>
<td class="enrolTD"> 29/35, wait:0 </td>
<td> <abbr title="Wednesday">WE</abbr><br> </td>
<td class="start_time"> 13:00<br> </td>
<td> 14:00<br> </td>
<td> MN 2100<br> </td>
<td class="noteTD"> </td>
<td class="text-right">
<!-- <input type='checkbox' name='courses' id='$checkbox_id' value='MAT102H5F-TUT0125-313:0014:00' aria-label='MAT102H5F TUT0125' /> --> <button name="courses" id="MAT102H5FTUT0125" value="MAT102H5F-TUT0125-313:0014:00" onclick="addCourse($(this))" aria-label="MAT102H5F TUT0125" class="addButton btn btn-sm btn-primary"><span class="glyphicon glyphicon-plus"></span><span class="button-text"> Add to Plan</span></button> </td>
</tr>
<tr id="tr_MAT102H5FTUT0126" class=" TUT W1 meeting_section OL0 todAft">
<td> </td>
<td> <label for="MAT102H5FTUT0126">TUT0126</label> </td> <
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
我期望最后一个tr
标签代表页面中加载的最后一个表,这是课程WGS102H5S
,而不是MAT102H5F
。
不确定这是否有用,但我目前正在android studio中对此进行编程。
JSoup中是否对此有任何修复?如果没有,我应该使用更好的库吗?
将.execute();
更改为.maxBodySize(0).execute().bufferUp();
https://jsoup.org/apidocs/org/jsoup/Connection.html#maxBodySize-int-https://jsoup.org/apidocs/org/jsoup/Connection.Response.html#bufferUp--