gpt4 book ai didi

python - 在 Python 中维护网页的更新文件缓存?

转载 作者:太空狗 更新时间:2023-10-30 01:07:57 27 4
gpt4 key购买 nike

我正在编写一个应用程序,它需要对通过 http 获取的大文件进行持久的本地访问。我希望将文件保存在本地目录(某种部分镜像)中,以便应用程序的后续执行只需注意到 URL 已在本地镜像,以便其他程序可以使用它们。

理想情况下,它还会保留时间戳或 etag 信息,并能够使用 If-Modified-Since 或 If-None-Match header 发出快速 http 请求以检查新版本,但避免完整下载,除非文件已经升级。但是,由于这些网页很少更改,我可能可以忍受陈旧副本中的错误,并在适当的时候找到其他方法从缓存中删除文件。

环顾四周,我看到 urllib.request.urlretrieve 可以保存缓存的副本,但它看起来无法处理我的 If-Modified-Since 缓存更新目标。

requests 模块看起来是最新最好的,但它似乎不适用于这种情况。有一个 CacheControl支持我的缓存更新目标的附加模块,因为它执行完整的 HTTP 缓存。但它似乎没有以可直接用于其他(非 python)程序的方式存储获取的文件,因为 FileCache 将资源存储为腌制数据。以及 can python-requests fetch url directly to file handle on disk like curl? - Stack Overflow 的讨论建议可以使用一些额外的代码来保存到本地文件,但这似乎不能很好地与 CacheControl 模块融合。

那么有没有一个网络抓取库可以满足我的需求?这基本上可以维护过去获取的文件的镜像(并告诉我文件名是什么),而我不必明确地管理所有这些?

最佳答案

我有同样的要求,找到了requests-cache .添加它非常容易,因为它扩展了 requests。您可以让缓存在内存中并在脚本结束后消失,或者使用 sqlite、mongodb 或 redis 使其持久化。这是我写的两行,它像宣传的那样工作:

import requests, requests_cache
requests_cache.install_cache('scraper_cache', backend='sqlite', expire_after=3600)

关于python - 在 Python 中维护网页的更新文件缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27118086/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com