将抓取文本中的日期和时间转换为日期时间格式

0 投票
3 回答
2924 浏览
提问于 2025-04-17 22:28

我正在用Python和Scrapy做一个新闻聚合器,但找不到解决我问题的答案。

我从一篇文章中抓取了一行文本,获取了发布时间,像这样:

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

这是我得到的结果(这个网站上没有ISO日期,和我为这个项目抓取的其他网站不一样):

Last Updated: Tuesday, March 11, 2014

我需要把这些日期和时间转换成一种格式,这样我也可以把其他来源的发布时间转换成同样的格式,并且可以通过这个键在JSON数据中按时间顺序排列。

所以,面对这种格式的日期,我该如何转换成可用的形式呢?最后我希望所有的ISO日期和那些写成文本的格式都能转换成像这样的格式:

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

3 个回答

2

今天,有一个很好的方法可以做到这一点,那就是使用scrapy团队开发的dateparser项目:https://github.com/scrapinghub/dateparser

2

我觉得你可以使用 dateutil.parser.parse 这个工具。这里有一个文档链接,它可以处理多种日期格式。在使用类似Debian的操作系统时,你可以通过安装python-dateutil这个软件包来获取它。

如果这个回答没有完全解决你的问题,请留言,我会尽量更新内容来帮助你。

2

编辑: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 对象。根据你想如何处理这些数据,你可能需要 将它们转换为 datetime 对象

撰写回答