【问题标题】:Parsing a HTML timetable using Jsoup使用 Jsoup 解析 HTML 时间表
【发布时间】:2015-04-11 03:16:54
【问题描述】:

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

我有时间表

我想解析以取出 <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();
但是,这意味着没有讲座有时间。除非没有计算空白并计算时间,假设每个空白是 15 分钟。

【问题讨论】:

  • 不要只是玩玩,而是阅读 JSoup 的文档并正确使用文档树。
  • 我首先获取表格的列(时间),然后获取该列中的实际单元格(实际数据)。然后你就有时间和实际数据了。
  • 您可能需要先获取trs,您的第一个 tr 将为您提供列数,每列将相隔 15 分钟。您需要使用该数字。

标签: java html jsoup


【解决方案1】:

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

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

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

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

所以只需使用上午 9 点作为基础并计数,直到找到一个非空元素 比如“COSE50582/Lec/Sem2 面向对象的应用工程 Gillibrand D, Mansfield GD D116”

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

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

【讨论】:

  • 完美。必须使用逻辑在正确的时间获取讲座时间等等。然而,选择器正是我想要的。
【解决方案2】:

您正在选择与“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());
}

【讨论】:

    猜你喜欢
    • 2014-01-01
    • 2019-10-10
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 2018-09-04
    • 2018-11-19
    • 1970-01-01
    相关资源
    最近更新 更多