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

时间:2008-09-23 03:14:08

标签: html regex

我正在尝试编写一个解析器来从典型的html表日/时间表中获取数据(如this)。

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

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

我有点弄清楚使用ruby的半执行混乱方法,我想知道你如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

这里最好的办法是使用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

答案 1 :(得分:0)

这是该计划需要做的事情:

  1. 读取(检测属性和打开/关闭标签)中的标签
  2. 构建表的内部表示(如何处理格式错误的表?)
  3. 计算每个事件的日期,开始时间和结束时间
  4. 将重复事件合并到事件系列
  5. 这是很多组件!您可能需要提出更具体的问题。

答案 2 :(得分:0)

使用http://www.crummy.com/software/BeautifulSoup/,该任务应该轻而易举。

答案 3 :(得分:0)

如上所述,在HTML上使用正则表达式通常是一个坏主意,你应该使用一个好的解析器 为了验证XHTML页面,您可以使用大多数语言中提供的简单XML解析器。唉,在您的情况下,给定页面不会验证(W3C的标记验证服务报告230错误,7警告!)
对于通用的,可能是格式错误的HTML,有处理它的库(kigurai推荐使用BeautifulSoup for Python,我也知道TagSoup for Java,还有其他)。