缓存网页数据的好方法(和/或平台无关的地方)

2 投票
1 回答
501 浏览
提问于 2025-04-17 02:11

我的pygtk程序是一个用于编辑基于XML的文档的工具,这些文档可能会引用其他文档,甚至是在线的,而这些文档又可能引用更多的文档。

当我加载一个文件时,程序会解析这些引用并加载相关的文档(这个过程是异步进行的)。不过,每次我启动编辑器时,这个过程都会重复,所以我想要一些本地缓存的机制,这样可以节省带宽和时间,对用户和托管这些引用文档的服务器都有好处。

有没有什么常见的方法可以做到这一点?到目前为止,我的想法是:

  • 以某种方式获取一个缓存目录的路径(希望能在不同平台上都能用)
    • 有没有什么好主意?
  • 在这个目录里放一个名为 md5(url) 的文件。
  • 如果已经存在一个缓存文件,并且它的时间没有超过 $cache_policy_age,那么就使用这个文件;否则,使用HTTP(urllib可以做到吗?)去检查这个文件自从下载以来是否有被修改过。

1 个回答

3

我个人使用 os.path.expanduser 来找到一个合适的缓存存放位置,这在Unix环境中很常见,因为大多数用户的配置和缓存都是保存在他们的主目录下。通常会使用一个以点开头的目录名,这样就会变成一个“隐藏”的目录。

我会这样做:

directory = os.path.join(os.path.expanduser("~"), ".my_cache")

至于远程文件的修改日期,你可以使用 urlib

import urllib
u = urllib.urlopen("http://www.google.com")
u.info().get("last-modified")

不过你需要确认你的HTTP服务器提供了最后修改的HTTP头信息,并且这个值是合理的!(这并不总是成立)

撰写回答