使用 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 来计算科目持续时间。
我知道有很多关于解析 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 来计算科目持续时间。