我像这样迭代一个 RSS 提要,其中 _file 是提要
d = feedparser.parse(_file)
for element in d.entries:
print repr(element.date)
日期输出是这样的
u'Thu, 16 Jul 2009 15:18:22 EDT'
我似乎无法理解如何实际量化上述日期输出,因此我可以使用它来限制提要元素。我所以我要问的是我怎样才能得到一个实际的时间,所以我可以说如果大于 7 天,跳过这个元素。
我像这样迭代一个 RSS 提要,其中 _file 是提要
d = feedparser.parse(_file)
for element in d.entries:
print repr(element.date)
日期输出是这样的
u'Thu, 16 Jul 2009 15:18:22 EDT'
我似乎无法理解如何实际量化上述日期输出,因此我可以使用它来限制提要元素。我所以我要问的是我怎样才能得到一个实际的时间,所以我可以说如果大于 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)
然后你可以做常规数学来查看已经过去了多少秒,或者使用 datetime 模块来做 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')
如果您使用的dateutil
是 Ubuntu,则由python-dateutil
软件包提供。