Python:从html页面解析出发布日期

Python:从html页面解析出发布日期,python,regex,Python,Regex,对于html页面,尤其是与新闻相关的页面,如果有一种解析发布日期的机制,这将非常有用 不幸的是,互联网上没有一套日期正则表达式/模式。CNN可能会像年月日一样发布,赫芬顿邮报可能会像年月日一样发布,等等 有没有人有比单纯的正则表达式解析更好的策略来从html页面中提取发布日期 谢谢。我不明白为什么正则表达式集合不起作用。有各种不同的格式,但实际上只有少数几种是最常见的。比如说,有了一打简单的正则表达式,你大概可以清除90%的日期 另一种(部分)方法是扫描月份名称和缩写,然后扫描周围文本中的日期和

对于html页面,尤其是与新闻相关的页面,如果有一种解析发布日期的机制,这将非常有用

不幸的是,互联网上没有一套日期正则表达式/模式。CNN可能会像年月日一样发布,赫芬顿邮报可能会像年月日一样发布,等等

有没有人有比单纯的正则表达式解析更好的策略来从html页面中提取发布日期


谢谢。

我不明白为什么正则表达式集合不起作用。有各种不同的格式,但实际上只有少数几种是最常见的。比如说,有了一打简单的正则表达式,你大概可以清除90%的日期

另一种(部分)方法是扫描月份名称和缩写,然后扫描周围文本中的日期和年份

仅就数字而言,最困难的部分是确定是先月后日期还是先日期后月份。因此,如果日期部分大于12,这将是很容易的,但除此之外,实际上并不需要知道

您还可以查找带有
datetime
属性的
元素,该属性应该遵循明确的格式(尽管不一定一致)


总之,我不认为有任何一种方法可以找到文档中的所有日期,除非您知道它们都遵循相同的格式,这显然不是一般情况。要很好地找到它们,您只需要使用几种不同的策略。

我不明白为什么一组正则表达式不起作用。有各种不同的格式,但实际上只有少数几种是最常见的。比如说,有了一打简单的正则表达式,你大概可以清除90%的日期

另一种(部分)方法是扫描月份名称和缩写,然后扫描周围文本中的日期和年份

仅就数字而言,最困难的部分是确定是先月后日期还是先日期后月份。因此,如果日期部分大于12,这将是很容易的,但除此之外,实际上并不需要知道

您还可以查找带有
datetime
属性的
元素,该属性应该遵循明确的格式(尽管不一定一致)

总之,我不认为有任何一种方法可以找到文档中的所有日期,除非您知道它们都遵循相同的格式,这显然不是一般情况。要很好地找到它们,您只需要使用几种不同的策略。

尝试使用库中的函数

它使用一些启发式方法来检测日期格式。它自动工作:)

python还有一个很好的小日期/时间库-。它也在内部使用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>)
导入次数 >>>《纽约时报》致环球(“2012-02-03 11:59:03”,“欧洲/阿姆斯特丹”) datetime.datetime(2012,2,3,10,59,3) >>>泰晤士报。到当地(‘欧洲/阿姆斯特丹’) datetime.datetime(2012,2,3,11,59,3,tzinfo=) 但对于仅仅检测日期格式的正则表达式,我认为是一个很好的解决方案

在实际项目中,我将执行以下步骤:

  • 尝试通过一组正则表达式(已知的日期格式)检查日期
  • 如果是已知格式,请使用带有预定义模式的stdlib
  • 如果它的格式未知-请使用dateutil的慢速解析,并在日志中写入一些警告
  • 从库中尝试函数

    它使用一些启发式方法来检测日期格式。它自动工作:)

    python还有一个很好的小日期/时间库-。它也在内部使用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>)
    
    导入次数 >>>《纽约时报》致环球(“2012-02-03 11:59:03”,“欧洲/阿姆斯特丹”) datetime.datetime(2012,2,3,10,59,3) >>>泰晤士报。到当地(‘欧洲/阿姆斯特丹’) datetime.datetime(2012,2,3,11,59,3,tzinfo=) 但对于仅仅检测日期格式的正则表达式,我认为是一个很好的解决方案

    在实际项目中,我将执行以下步骤:

  • 尝试通过一组正则表达式(已知的日期格式)检查日期
  • 如果是已知格式,请使用带有预定义模式的stdlib
  • 如果它的格式未知-请使用dateutil的慢速解析,并在日志中写入一些警告

  • 我正在阅读他们的api,看起来很有趣!但是我很难找到你刚才描述的用途。有什么想法吗?谢谢,我刚刚在上面加了几个例子。谢谢,你的回答实际上解决了我一半的问题!上半部分实际上是检测html文件中存在“2013年4月12日”或“2013年4月12日”的位置。但无论如何干得不错。如果一天后没有人回复,我会把你标记为格林。我补充了一些关于格式检测的想法。是的,我认为正则表达式在这里是可以的。我现在正在阅读他们的api,看起来很有趣!但是我很难找到你刚才描述的用途。有什么想法吗?谢谢,我刚刚在上面加了几个例子。谢谢,你的回答实际上解决了我一半的问题!上半部分实际上是检测html文件中存在“2013年4月12日”或“2013年4月12日”的位置。但无论如何干得不错。如果一天后没有人回复,我会把你标记为格林。我补充了一些关于格式检测的想法。是的,我认为正则表达式在这里是可以的。