使用feedparser按日期限制RSS元素。 [python]的

问题描述:

我遍历一个RSS源,像这样在那里_file是饲料使用feedparser按日期限制RSS元素。 [python]的

日期输出出来,像这样

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

我似乎明白如何真正量化上述日期输出,所以我可以使用它来限制Feed元素。我所以我问的是如何得到一个实际的时间,所以我可以说如果大于7天,跳过这个元素。

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) 

然后,你可以做普通数学,看看有多少秒后,或使用日期时间模块做timedeltas。

单程

>>> 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()的日期计算的。

如果您安装了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,dateutilpython-dateutil封装。