

Запросы-кэш -это постоянный кэш HTTP, который обеспечивает простой способ получить лучшую производительность с библиотекой Python запросов.
Полная документация проекта может быть найдена на запросах-cache.readthedocs.io.
requests , с которой вы уже знакомы. Добавьте кэширование с заменой замены для requests.Session requestsСначала установите с PIP:
pip install requests-cacheЗатем используйте requests_cache.cachedsession, чтобы сделать ваши запросы. Это ведет себя как обычные запросы.
Чтобы проиллюстрировать, мы позвоним в конечную точку, которая добавляет задержку на 1 секунду, моделируя медленный или ограниченный на скорость веб-сайт.
Это занимает 1 минуту:
import requests
session = requests . Session ()
for i in range ( 60 ):
session . get ( 'https://httpbin.org/delay/1' )Это занимает 1 секунду:
import requests_cache
session = requests_cache . CachedSession ( 'demo_cache' )
for i in range ( 60 ):
session . get ( 'https://httpbin.org/delay/1' ) При кэшировании ответ будет извлечен один раз, сохраняется в demo_cache.sqlite , и последующие запросы вернут кэшированный ответ вблизи.
Если вы не хотите управлять объектом сеанса или просто хотите быстро проверить его в своем приложении без изменения какого-либо кода, также можно установить по всему миру, и все запросы будут прозрачно кэшированы:
import requests
import requests_cache
requests_cache . install_cache ( 'demo_cache' )
requests . get ( 'https://httpbin.org/delay/1' )По умолчанию, запросы-кэш сохранят кэшированные ответы на неопределенный срок. В большинстве случаев вы захотите использовать одну из двух следующих стратегий, чтобы сбалансировать свежесть и производительность кэша:
Определите, как долго сохранять ответы:
Используйте параметр expire_after , чтобы установить фиксированное время истечения для всех новых ответов:
from requests_cache import CachedSession
from datetime import timedelta
# Keep responses for 360 seconds
session = CachedSession ( 'demo_cache' , expire_after = 360 )
# Or use timedelta objects to specify other units of time
session = CachedSession ( 'demo_cache' , expire_after = timedelta ( hours = 1 ))Смотрите истечение срока действия для получения дополнительных функций и настроек.
Используйте заголовки контроля кэша:
Используйте параметр cache_control , чтобы включить автоматическое истечение на основе Cache-Control и других стандартных заголовков HTTP, отправленных сервером:
from requests_cache import CachedSession
session = CachedSession ( 'demo_cache' , cache_control = True )Смотрите заголовки кэша для получения более подробной информации.
Настройки по умолчанию хорошо работают для большинства вариантов использования, но есть много способов настраивать поведение кэширования при необходимости. Вот быстрый пример некоторых доступных вариантов:
from datetime import timedelta
from requests_cache import CachedSession
session = CachedSession (
'demo_cache' ,
use_cache_dir = True , # Save files in the default user cache dir
cache_control = True , # Use Cache-Control response headers for expiration, if available
expire_after = timedelta ( days = 1 ), # Otherwise expire responses after one day
allowable_codes = [ 200 , 400 ], # Cache 400 responses as a solemn reminder of your failures
allowable_methods = [ 'GET' , 'POST' ], # Cache whatever HTTP methods you want
ignored_parameters = [ 'api_key' ], # Don't match this request param, and redact if from the cache
match_headers = [ 'Accept-Language' ], # Cache a different response per language
stale_if_error = True , # In case of request errors, use stale cache data if possible
)Чтобы узнать больше о том, что вы можете сделать с помощью запросов, посмотрите: