使用 Jsoup 解析 HTML 时间表

Parsing a HTML timetable using Jsoup

我知道有很多关于解析 HTML table 的问题。然而,在做了一些研究并研究了 Jsoup 之后,我有点被它难住了。

我有时间table

我想解析以取出 <td> 标签的文本,但以某种格式保留它。

通过简单地使用 Jsoup 来尝试可用的函数并查看 Cookbook 和当前的 API 文档。由此我设法做到了以下几点;

Document doc = Jsoup.connect("http://crwnmis3.staffs.ac.uk/Reporting/Individual;Student%20Sets;name;L2SE?&template=Online%20One%20Page%20Student%20Set&days=1-5&periods=5-53&width=0&height=0").get();

String title = doc.select("td").text();      
System.out.println(title);

唯一的问题是打印出一长串。

我更愿意将数据分成易于管理的块。也许我可以做一个 title.Split();?
然而,这意味着没有演讲是有时间的。除非没有计算白 space 秒并计算时间,假设每个白 space 是 15 分钟。

您正在选择匹配 "td" 的所有元素并打印其中的一大串。您可以将它们作为元素集合获取,然后像这样一个一个地迭代它们:

Document doc = Jsoup.connect("http://crwnmis3.staffs.ac.uk/Reporting/Individual;Student%20Sets;name;L2SE?&template=Online%20One%20Page%20Student%20Set&days=1-5&periods=5-53&width=0&height=0").get();
Elements titles = doc.getElementsByTag("td");      
for(Element e : titles) {
    System.out.println(e.text());
}

我将从每次处理一行开始。所以我将从每个工作日之后的刻钟开始,使用像

这样的选择器
tr td.row-label-one:contains(Tue) ~ td

如果像 ["Mon","Tue",..."Fri"] 这样循环数组的内容,您可以处理整个星期。

此 css 查询将为您提供该工作日的 td 元素兄弟。 那些兄弟姐妹是那个工作日的刻钟。

所以只需使用上午 9 点作为基础并计数,直到找到一个非空元素 喜欢 "COSE50582/Lec/Sem2 Object-Oriented Application Engineering Gillibrand D, Mansfield GD D116"

您可以在索引 4 处找到该元素,因此 9 + (15 min * 4 ) = 10 am

注意:为简单起见,我假设所有科目只有 4 个季度的持续时间,否则您可以使用 colspan 来计算科目持续时间。