使用feedparser按日期限制RSS元素。[Python]
我这样遍历一个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天,就跳过这个元素。
3 个回答
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
这个软件包提供的。
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() 来进行日期计算。
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 模块来处理时间差。