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

问题描述 投票:0回答:4

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

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

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

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

html regex
4个回答
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

0
投票

这是程序需要做的事情:

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

这是很多组件!您可能需要提出更具体的问题。


0
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.