簡體   English   中英

如何檢索不超過X天的所有RSS條目

[英]How do I retrieve all RSS entries that are no more than X days old

我正在使用Python和RSS feedparser模塊來檢索RSS條目。 但是,我只想檢索不超過x天的新聞條目。

例如,如果x = 4,則我的Python代碼不應獲取比當前日期早四天的任何內容。

Feedparser可讓您抓取該條目的“發布”日期,但是它是unicode類型的,我不知道如何將其轉換為datetime對象。

這是一些示例輸入:

date = 'Thu, 29 May 2014 20:39:20 +0000'

這是我嘗試過的:

from datetime import datetime
date_object = datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')

這是我得到的錯誤:

ValueError: 'z' is a bad directive in format '%a, %d %b %Y %H:%M:%S %z'

我希望這樣做:

from datetime import datetime
a = datetime(today)
b = datetime(RSS_feed_entry_date)
>>> a-b
datetime.timedelta(6, 1)
(a-b).days
6

為此,您已經有一個time.struct_time查看feed.entries[0].published_parsed

您可以使用time.mktime將其轉換為時間戳,並將其與time.time()進行比較,以了解過去的時間:

一個例子:

>>> import feedparser
>>> import time

>>> f = feedparser.parse("http://feeds.bbci.co.uk/news/rss.xml")
>>> f.entries[0].published_parsed
time.struct_time(tm_year=2014, tm_mon=5, tm_mday=30, tm_hour=14, tm_min=6, tm_sec=8, tm_wday=4, tm_yday=150, tm_isdst=0)

>>> time.time() - time.mktime(feed.entries[0].published_parsed)
4985.511506080627

顯然,這對您來說將是一個不同的值,但是如果小於(對於您而言)86400 * 4(4天的秒數),那就是您想要的。

因此,簡而言之

[entry for entry in f.entries if time.time() - time.mktime(entry.published_parsed) < (86400*4)]

會給你你的清單

from datetime import datetime
date = 'Thu, 29 May 2014 20:39:20 +0000'
if '+' in date:
    dateSplit = date.split('+')
    offset = '+' + dateSplit[1]
    restOfDate = str(dateSplit[0])
date_object = datetime.strptime(restOfDate + ' ' + offset, '%a, %d %b %Y %H:%M:%S ' + offset)
print date_object

Yields 2014-05-29 20:39:20 ,當我研究您的時區錯誤時,我遇到了另一個SO問題,說strptime在時區strptime有麻煩( 鏈接到問題)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM