urllib.urlretrieve()
已经为你做了这个。如果输出文件名存在,它会进行所有必要的检查以避免再次下载它。
但这仅在服务器支持时才有效。因此,您可能想要打印 HTTP 标头(函数调用的第二个结果)以查看是否可以进行缓存。
这篇文章也可能有帮助: http: //pymotw.com/2/urllib/
它在结尾处有以下代码:
import urllib
import os
def reporthook(blocks_read, block_size, total_size):
if not blocks_read:
print 'Connection opened'
return
if total_size < 0:
# Unknown size
print 'Read %d blocks' % blocks_read
else:
amount_read = blocks_read * block_size
print 'Read %d blocks, or %d/%d' % (blocks_read, amount_read, total_size)
return
try:
filename, msg = urllib.urlretrieve('http://blog.doughellmann.com/', reporthook=reporthook)
print
print 'File:', filename
print 'Headers:'
print msg
print 'File exists before cleanup:', os.path.exists(filename)
finally:
urllib.urlcleanup()
print 'File still exists:', os.path.exists(filename)
这会下载一个文件,显示进度并打印标题。使用它来调试您的场景,以找出缓存无法按预期工作的原因。