requests-cacheは、requestsの取得データをキャッシュするモジュールです。 requests-cacheを使うと、requestsは最初の1回目は実際にアクセスします。 2回目以降は、キャッシュの有効期限がきれるまでrequestsはキャッシュデータを返します。 開発などで、同じURLにrequestsでアクセスする場合、アクセス時間の短縮ができて便利です。

参考

インストール

requests-cacheは、requestsが必要です。 そのため、requestsをpipでインストールします。

pip install requests

requests-cacheもpipでインストールします。

pip install requests-cache

使用方法

基本的な使い方は以下のようになります。 requests_cache.install_cache でキャッシュが有効になります。

import requests
import requests_cache

requests_cache.install_cache(cache_name='example', backend='sqlite', expire_after=60*120)

url = "http://example.com"
response = requests.get(url)
content = response.content
....

キャッシュを有効にする

キャッシュを有効にするrequests_cache.install_cacheを使います。

requests_cache.install_cache(cache_name='example', backend='sqlite', expire_after=60*120)

キャッシュの寿命などの設定については、このページの以下を参照

キャッシュクリア

キャッシュをクリアする場合は、以下を使います。

requests_cache.clear()

キャッシュを無効にする

キャッシュを無効にする場合、以下を使います。

requests_cache.disabled()

import requests
import requests_cache

requests_cache.install_cache(cache_name='example', backend='sqlite', expire_after=60*120)

url = "http://example.com"
response = requests.get(url)
content = response.content
....

with requests_cache.disabled():
    response = requests.get(url)  #キャッシュが無効
    ...

キャッシュの設定

キャッシュ名やキャッシュ方法などを指定する箇所は、以下になります。

requests_cache.install_cache(cache_name='example', backend='sqlite', expire_after=60*120)

cache_name

キャッシュ名の指定は、キーに'cache_name'を使用し、この例では "example"になります。

cache_name='example'
backendがsqliteの場合、キャッシュが作成されると、以下のようなsqliteのファイルが作成されます。 このファイル名は、キャッシュ名 + ".sqlite" になります。
example.sqlite

第一引数に指定することでcache_nameを省略することが可能です。

requests_cache.install_cache('example', backend='sqlite', expire_after=60*120)

backend

キャッシュ方法の指定は、キーに'backend'を使用します。 この例では、Sqliteになります。

 backend='sqlite'

backendに指定できるのは、以下になります。

  • sqlite
  • mongodb
  • redis
  • memory

expire_after

expire_afterは、キャッシュの寿命指定になり、timedelta、または秒数を指定します。 例では、60 * 120 なので、キャッシュの寿命は120分(2時間)になります。

expire_after=60*120

timedeltaを使用する例は以下のようになります。

import datetime

expire_after = datetime.timedelta(hours=2)
requests_cache.install_cache('example', backend='sqlite', expire_after=expire_after)

以下のようにすることも可能です。

from datetime import timedelta

requests_cache.install_cache('example', backend='sqlite', expire_after=timedelta(hours=2))

サンプル

requests_cacheを使ったサンプル

beautifulsoup

BeautifulSoupで使用するサンプルは以下のようになります。

from bs4 import BeautifulSoup
import requests
import requests_cache

requests_cache.install_cache('example', backend='sqlite', expire_after=60*120)

url = "http://example.com"
response = requests.get(url)
content = response.content
soup = BeautifulSoup(content, 'html.parser')