我正在使用Python和RSS feedparser模块来检索RSS条目。但是,我只想检索一个新闻项目,如果它不超过x天。
例如,如果x = 4,那么我的Python代码不应该提取比当前日期早四天的任何内容。
Feedparser允许您抓取条目的“已发布”日期,但它的类型为unicode,我不知道如何将其转换为日期时间对象。
以下是一些示例输入:
date = 'Thu, 29 May 2014 20:39:20 +0000'
以下是我的尝试:
from datetime import datetime
date_object = datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')
这是我得到的错误:
ValueError: 'z' is a bad directive in format '%a, %d %b %Y %H:%M:%S %z'
这是我希望用它做的事情:
from datetime import datetime
a = datetime(today)
b = datetime(RSS_feed_entry_date)
>>> a-b
datetime.timedelta(6, 1)
(a-b).days
6
答案 0 :(得分:1)
为此,您已time.struct_time
查看feed.entries[0].published_parsed
您可以使用time.mktime将其转换为时间戳,并将其与time.time()进行比较,以查看它过去的距离:
一个例子:
>>> import feedparser
>>> import time
>>> f = feedparser.parse("http://feeds.bbci.co.uk/news/rss.xml")
>>> f.entries[0].published_parsed
time.struct_time(tm_year=2014, tm_mon=5, tm_mday=30, tm_hour=14, tm_min=6, tm_sec=8, tm_wday=4, tm_yday=150, tm_isdst=0)
>>> time.time() - time.mktime(feed.entries[0].published_parsed)
4985.511506080627
很明显,这对你来说是一个不同的价值,但如果这个值小于(在你的情况下)86400 * 4(4天内的秒数),那就是你想要的。
所以,简明扼要地
[entry for entry in f.entries if time.time() - time.mktime(entry.published_parsed) < (86400*4)]
会给你你的清单
答案 1 :(得分:1)
from datetime import datetime
date = 'Thu, 29 May 2014 20:39:20 +0000'
if '+' in date:
dateSplit = date.split('+')
offset = '+' + dateSplit[1]
restOfDate = str(dateSplit[0])
date_object = datetime.strptime(restOfDate + ' ' + offset, '%a, %d %b %Y %H:%M:%S ' + offset)
print date_object
收益2014-05-29 20:39:20
,在我研究您的时区错误时,我遇到了另一个问题,即strptime
遇到时区问题(link to question)。