繁体   English   中英

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

[英]How do I retrieve all RSS entries that are no more than X days old

我正在使用Python和RSS feedparser模块来检索RSS条目。 但是,我只想检索不超过x天的新闻条目。

例如,如果x = 4,则我的Python代码不应获取比当前日期早四天的任何内容。

Feedparser可让您抓取该条目的“发布”日期,但是它是unicode类型的,我不知道如何将其转换为datetime对象。

这是一些示例输入:

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

为此,您已经有一个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)]

会给你你的清单

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

Yields 2014-05-29 20:39:20 ,当我研究您的时区错误时,我遇到了另一个SO问题,说strptime在时区strptime有麻烦( 链接到问题)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM