对于 html 页面,尤其是与新闻相关的页面,如果有一种解析发布日期的机制,将会非常有帮助并且非常有用。
不幸的是,互联网上没有一套日期的正则表达式/模式。CNN 可能会像 MONTH DD、YYYY 一样发布它,而 HuffingtonPost 可能会像 MM/DD/YY 一样发布,等等。
有没有人有任何比纯正则表达式解析更好的策略来从 html 页面中提取发布日期?
谢谢你。
它使用一些启发式方法来检测日期格式。它自动工作:)
>>> from dateutil.parser import parse
>>> parse('April 12, 2013')
datetime.datetime(2013, 4, 12, 0, 0)
>>> parse('04/12/13')
datetime.datetime(2013, 4, 12, 0, 0)
还有一个不错的 Python 小日期/时间库 — <a href="https://github.com/nvie/times/" rel="nofollow">times。它也在内部使用 dateutil,但它也有助于与时区一起正常工作。
>>> import times
>>> times.to_universal('2012-02-03 11:59:03', 'Europe/Amsterdam')
datetime.datetime(2012, 2, 3, 10, 59, 3)
>>> times.to_local(_, 'Europe/Amsterdam')
datetime.datetime(2012, 2, 3, 11, 59, 3, tzinfo=<DstTzInfo 'Europe/Amsterdam' CET+1:00:00 STD>)
但是我认为仅仅检测日期格式正则表达式是一个很好的解决方案。
在实际项目中,我会执行以下步骤:
我不明白为什么一组正则表达式不起作用。有多种不同的格式,但实际上只有少数最常见的格式。比如说,使用十几个简单的正则表达式,您可能可以清除 90% 的日期。
另一种(部分)方法是扫描月份名称和缩写,然后扫描周围文本的日期和年份。
对于纯数字,最难的部分是弄清楚它是月份然后日期还是日期然后月份。如果日期部分大于 12,那么这很容易,但否则就真的不知道了。
您还可以查找具有属性的<time>
元素,该datetime
属性应该遵循明确的格式(尽管不一定一致)。
最重要的是,我认为没有任何一种方法可以找到文档中的所有日期,除非您知道它们都遵循相同的格式,这显然不会是一般情况。要很好地找到它们,您只需要采用几种不同的策略。