【问题标题】:Restricting RSS elements by date with feedparser. [Python]使用 feedparser 按日期限制 RSS 元素。 [Python]
【发布时间】:2010-02-05 03:29:42
【问题描述】:

我像这样迭代 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 天,请跳过此元素。

【问题讨论】:

    标签: python feedparser


    【解决方案1】:

    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。

    【讨论】:

      【解决方案2】:

      一种方式

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

      【讨论】:

        【解决方案3】:

        如果你安装了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 软件包提供。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-29
          • 2016-04-08
          • 2013-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多