You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何清除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:27:31