- requests_cache(专门用于 HTTP 请求的缓存库;支持 SQLite、Redis、文件系统等多种存储后端;非常适合缓存 HTTP GET 请求的内容。)
- 同类数据缓存库:diskcache、joblib
参考资料:
基本用法与参数含义
requests_cache.install_cache(
cache_name='cache', # 缓存文件的名称
backend='filesystem', # 使用文件系统作为缓存后端
expire_after=None, # 不设置缓存过期时间,缓存不会过期
allowable_codes=(200,), # 仅缓存返回状态为 200 的响应
allowable_methods=('GET',), # 仅缓存 GET 请求
filter_fn=filter_fn, # 使用自定义过滤函数
session_factory=requests_cache.core.CachedSession,# 使用默认的 CachedSession
)
为了理解函数功能,介绍下各个参数的含义:
- cache_name:缓存文件名称
backend:设置缓存的存储机制,默认使用sqlite进行存储
- 支持多种不同的存储机制:filesystem、memory、sqlite、mongoDB、redis、gridfs、mongodb、dynamodb。在设置存储机制为第三方软件数据库时需要提前安装对应的模块。
- memory(不推荐!):以字典的形式将缓存存储在内存当中,程序运行完以后缓存将被销毁。需要注意的是,这样设置会导致requests_cache 将缓存记录存储在内存中。内存中的数据在程序终止或因错误导致程序退出时会被释放。在这种情况下,缓存记录在 Python 程序重启后会完全消失。这意味着缓存的有效期在程序退出后不再生效,因为缓存数据本身已经丢失;而且程序重启后,即使请求的 URL 与之前完全相同,也会重新发起实际的网络请求,因为之前的缓存记录已经不复存在。
- filesystem(推荐):对比memory,filesystem 会将缓存数据存储在本地文件系统中,这意味着缓存记录会持久化存储,程序重启后缓存依然存在,直到缓存过期或被手动清除。同时可以存储大量的缓存数据,而不会占用过多内存,适合大规模的缓存需求
- expire_after:设置缓存的有效时间(默认单位秒),设置为None则缓存永久有效
- allowable_codes:设置状态码
- allowable_methods:设置请求方式,默认get,表示只有get请求才可以生成缓存
- session_factory:设置缓存执行的对象,需要实现CachedSession类
- backend_options:如果缓存的存储方式为sqlit、mongo、redis数据库,该参数表示设置数据库的连接方式
代码基本实践:
一般情况下,不需要单独设置任何参数,使用默认参数即可
import requests
import requests_cache
# 安装缓存,设置缓存名称、后端和过期时间
requests_cache.install_cache(
cache_name='my_cache', # 缓存文件名(将存储为 my_cache.sqlite)
backend='filesystem', # 使用文件系统作为缓存后端
expire_after=3600, # 缓存有效期为 1 小时(3600 秒)
)
# 发送 GET 请求,第一个请求会从网络获取数据,并缓存响应
response1 = requests.get('https://api.github.com')
print("First request, from cache:", response1.from_cache) # 输出 False,因为第一次请求会从网络获取
# 发送另一个相同的 GET 请求,这次会从缓存中读取响应
response2 = requests.get('https://api.github.com')
print("Second request, from cache:", response2.from_cache) # 输出 True,因为第二次请求会从缓存中读取
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。