如何从典型的HTML日期/时间表中提取数据?

时间:2020-03-06 14:34:42  来源:igfitidea点击:

我正在尝试编写一个解析器,以从典型的html表日期/时间安排中获取数据(像这样)。

我想给这个解析器一个页面和一个表类/ ID,并让它返回事件列表以及事件发生的日期和时间。它应该考虑到rowpans和colspans,因此对于链接的示例,它将返回

{:event => "Music With Paul Ray", :times => [T 12:00am - 3:00am, F 12:00am - 3:00am]}, etc.

我已经想出了使用ruby一半执行的凌乱方法,并且想知道如何解决这个问题?

解决方案

该程序将需要执行以下操作:

  • 读取中的标签(检测属性和打开/关闭标签)
  • 建立表格的内部表示(如何处理格式错误的表格?)
  • 计算每个事件的日期,开始时间和结束时间
  • 将重复的事件合并到一个事件系列中

有很多组件!我们可能需要问一个更具体的问题。

此处最好的方法是使用HTML解析器。使用HTML解析器,我们可以以编程方式查看表行,而不必求助于易碎的正则表达式并自行进行解析。

然后,我们可以按照以下方式运行一些逻辑(这不是可运行的代码,只是可以从中看到想法的草图):

for row in table:
    i = 0
    for cell in row: # skipping row 1
        event = name
        starttime = row[0]
        endtime = table[ i + cell.rowspan + 1 ][0]

        print event, starttime, endtime
    i += 1

使用http://www.crummy.com/software/BeautifulSoup/,该任务应该很容易。

如前所述,在HTML上使用正则表达式通常不是一个好主意,我们应该使用一个好的解析器。
为了验证XHTML页面,可以使用大多数语言都可用的简单XML解析器。 las,情况下,给定的页面无法通过验证(W3C的标记验证服务报告230错误,共7条警告!)
对于通用的,可能是格式错误的HTML,有一些库可以处理该问题(kigurai建议使用Python的BeautifulSoup,我也知道Java的TagSoup,还有其他)。