使用feedparser按日期限制RSS元素。 [蟒蛇]

时间:2010-02-05 03:29:43

标签: python feedparser

我迭代一个RSS提要,因为_file是提要

d = feedparser.parse(_file)
for element in d.entries: 
    print repr(element.date)

日期输出就像这样

u'Thu, 16 Jul 2009 15:18:22 EDT'

我似乎无法理解如何实际量化上述日期输出,因此我可以使用它来限制Feed元素。我所以我要问的是如何才能获得实际的时间,所以我可以说如果超过7天,请跳过这个元素。

3 个答案:

答案 0 :(得分:5)

feedparser应该从Python的时间模块中为您提供struct_time对象。我猜它不能识别日期格式,所以给你原始字符串。

请参阅此处,了解如何添加对解析格式错误的时间戳的支持:

http://pythonhosted.org/feedparser/date-parsing.html

如果你设法让它给你struct_time,你可以在这里阅读更多相关内容:

http://docs.python.org/library/time.html#time.struct_time

struct_time对象拥有您需要的一切。他们有这些成员:

time.struct_time(tm_year=2010, tm_mon=2, tm_mday=4, tm_hour=23, tm_min=44, tm_sec=19, tm_wday=3, tm_yday=35, tm_isdst=0)

我通常将结构转换为秒,如下所示:

import time
import calendar

struct = time.localtime()
seconds = calendar.timegm(struct)

然后你可以做常规数学看看已经过了多少秒,或者使用datetime模块做timedeltas。

答案 1 :(得分:1)

单程

>>> import time
>>> t=time.strptime("Thu, 16 Jul 2009 15:18:22 EDT","%a, %d %b %Y %H:%M:%S %Z")
>>> sevendays=86400*7
>>> current=time.strftime ("%s",time.localtime())
>>> if int(current) - time.mktime(t) > sevendays:
        print "more than 7 days"

您还可以查看datetime模块并使用timedelta()进行日期计算。

答案 2 :(得分:0)

如果您安装dateutil模块:

import dateutil.parser as dp
import dateutil.tz as dtz
import datetime

date_string=u'Thu, 16 Jul 2009 15:18:22 EDT'
adatetime=dp.parse(date_string)
print(adatetime) 
# 2009-07-16 15:18:22-04:00

now=datetime.datetime.now(dtz.tzlocal())
print(now)
# 2010-02-04 23:35:52.428766-05:00

aweekago=now-datetime.timedelta(days=7)
print(aweekago)
# 2010-01-28 23:35:52.428766-05:00

if adatetime<aweekago:
    print('old news')

如果您使用的是Ubuntu,dateutil包提供了python-dateutil