スクレイピングをしていると様々な日付のフォーマットが見受けられます。基本的には、以下のように取得した日付の文字列をdatetimeオブジェクトに変換してから、比較したり、足したり引いたりしています。
import datetime t = 'Mon, 02 Dec 2019 00:00:00 +0900' d = datetime.datetime.strptime(t, '%a, %d %b %Y %H:%M:%S %z') print(d)
これを実行すると以下のようになります。
2019-12-02 00:00:00+09:00
そんな作業を続けていると次のようなエラーが発生しました。
ValueError: time data 'Jan, 01 Dec 2019 08:30:00 +0900' does not match format '%a, %d %b %Y %H:%M:%S %z'
ValueErrorはstrptimeで指定したフォーマットと日付の文字列が一致しないと発生するエラーです。
曜日が%a、日付が%d…取得した日付の文字列と仕様を三十分ほどにらめっこしてやっと気づきました。
月が二つ(JanとDec)ある。。。
対策としては、以下のように問題の文字列を削除してしまうことですが。。。
対策1
import datetime t = 'Jan, 01 Dec 2019 08:30:00 +0900' d = datetime.datetime.strptime(t.replace("Jan, ",""), '%d %b %Y %H:%M:%S %z') print(d)