如何检索不超过X天的所有RSS条目

时间:2014-05-30 14:47:02

标签: python python-2.7 rss feedparser

我正在使用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

2 个答案:

答案 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)