feedparserと日付でRSS要素を制限します。 【パイソン】
-
18-09-2019 - |
質問
私は_fileがフィードですので、どこのようにRSSフィードを繰り返す
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)
次に、あなただけ経過した秒数を参照、またはtimedeltasを行うためにdatetimeモジュールを使用するために定期的な計算を行うことができます。
他のヒント
片道
>>> 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"
あなたはまたのために)(日時のモジュールを参照してくださいとは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を使用している場合は、、dateutil
はpython-dateutil
パッケージで提供されます。