如何从典型的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,还有其他)。