如何清除Python requests_cache模块缓存?实现单次运行仅获新响应且复用缓存名
requests_cache缓存清除与单次运行仅更新一次响应的实现方案
清除缓存的两种常用方式
- 清除指定缓存名的全部内容:初始化
CachedSession时指定缓存名,调用clear()方法即可清空该缓存的所有记录
import requests_cache # 绑定目标缓存名 session = requests_cache.CachedSession('my_custom_cache') # 清空该缓存 session.cache.clear()
- 精准清除单个URL的缓存:如果不需要清空全部,只针对目标网站的特定URL清除,用
delete_url()方法
# 仅清除目标URL的缓存记录 session.cache.delete_url('https://your-target-site.com/updated-page')
单次运行仅获取一次新响应的实现逻辑
核心是在程序启动阶段判断是否需要更新,若需要则先清除对应缓存,发起一次请求写入新缓存;后续同一运行周期内的所有请求直接复用这次的新缓存,不会重复请求网站。
基础手动触发版本
适合需要手动控制更新时机的场景:
import requests_cache def get_website_content(target_url, cache_name='my_custom_cache', need_refresh=False): # 初始化带固定缓存名的会话 session = requests_cache.CachedSession(cache_name) if need_refresh: # 清除目标URL缓存 session.cache.delete_url(target_url) # 发起一次请求获取最新内容,自动写入缓存 latest_response = session.get(target_url) else: # 直接读取缓存(包括刚写入的新缓存) latest_response = session.get(target_url) return latest_response # 示例调用:检测到网站更新时触发刷新 content = get_website_content('https://your-target-site.com/updated-page', need_refresh=True) # 同一运行进程内再次调用,直接复用刚获取的新缓存 content_reuse = get_website_content('https://your-target-site.com/updated-page', need_refresh=False)
自动检测更新版本
通过对比网站返回的Last-Modified或ETag头信息,自动判断是否需要更新缓存,无需手动触发:
import requests_cache from requests import Request def should_refresh_cache(session, target_url): # 发送HEAD请求获取网站最新的头信息 head_resp = session.head(target_url) current_last_modified = head_resp.headers.get('Last-Modified') current_etag = head_resp.headers.get('ETag') # 读取缓存中该URL的历史头信息 cached_entry = session.cache.get_response(Request('GET', target_url)) if not cached_entry: # 无缓存时直接需要刷新 return True cached_last_modified = cached_entry.headers.get('Last-Modified') cached_etag = cached_entry.headers.get('ETag') # 对比头信息判断内容是否更新 return current_last_modified != cached_last_modified or current_etag != cached_etag # 使用示例 session = requests_cache.CachedSession('my_custom_cache') target_url = 'https://your-target-site.com/updated-page' if should_refresh_cache(session, target_url): session.cache.delete_url(target_url) response = session.get(target_url) else: response = session.get(target_url) # 同一运行内后续请求直接复用缓存 response_reuse = session.get(target_url)
内容的提问来源于stack exchange,提问作者user20080282
相关产品推荐
相关产品推荐

