将日期和时间从拼写文本转换为日期时间格式

时间:2014-03-15 19:44:40

标签: python date datetime time scrapy

我正在使用Python和Scrapy制作新闻聚合器,但无法找到我正在尝试做的事情的答案。

我正在从文章,发布时间中抓取一行文字,如下:

item['published'] = hxs.select('//div[@class="date"]/text()').extract()

这就是我回来的地方(网站上没有ISO日期,因为我正在为这个项目抓一些其他人):

Last Updated: Tuesday, March 11, 2014

我需要将这些日期和时间放入一种格式,我也可以转换其他来源'发布时间,以便我可以通过JSON Feed中的该键按时间顺序排序。

因此,使用该格式的日期,如何将其转换为可用的表单?我最终希望将所有ISO日期和写出的文本格式转换为以下内容:

Published: 2:15 p.m., March 15, 2014.

3 个答案:

答案 0 :(得分:2)

我认为你想使用dateutil.parser.parse。这是the documentation。它处理各种格式。在debian风格的操作系统上,它可以在python-dateutil包中找到。

如果此答案没有完全回答您的问题,请发表评论,我会尝试对其进行适当更新。

答案 1 :(得分:1)

编辑:上面的jrennie解决方案比我的更清洁。

这很有效。我使用strptime来获得解决方案。请注意,由于原始字符串中没有hh:mm数据,因此我无法像您在示例中那样输出任何hh:mm数据。

逐步解决方案:

>>> import time
>>> t = "Last Updated: Tuesday, March 11, 2014"
>>> t = t.rsplit(' ',4)[1:5] # Get a list of the relevant date fields
['Tuesday,', 'March', '11,', '2014']
>>> t = ' '.join(t) # Turn t into a string so we can use strptime
'Tuesday, March 11, 2014'
>>> t = time.strptime(t, "%A, %B %d, %Y") # Use strptime
time.struct_time(tm_year=2014, tm_mon=3, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=70, tm_isdst=-1)

一个班轮:

import time

t = "Last Updated: Tuesday, March 11, 2014"
time.strptime(' '.join(t.rsplit(' ',4)[1:5]), "%A, %B %d, %Y")

这会产生struct_time。您可能最终想要convert these to datetimes,具体取决于您希望如何操纵它们。

答案 2 :(得分:0)

今天要做的一个好方法是使用草率团队的dateparser项目:https://github.com/scrapinghub/dateparser