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

Urllib缓存异常:重复下载Unsplash随机图片问题求助

解决Unsplash随机图片重复下载的问题

嘿,我来帮你搞定这个问题!你猜的方向有点偏差——问题不是urllib的本地缓存,而是Unsplash的source.unsplash.com/random接口会对重复的无参数请求返回相同内容(这是服务器端的缓存策略导致的)。哪怕你调用urllib.urlcleanup(),也没法绕过服务器端的缓存逻辑。

快速解决:给请求URL加唯一参数

最简单的办法就是每次请求时在URL后面加一个唯一的标识(比如时间戳、随机数),让服务器认为这是全新的请求,从而返回不同的随机图片。

修改后的代码如下:

import urllib
import time  # 引入时间模块生成唯一时间戳

num = 4
for i in range(1, num + 1):
    print("Downloading image #" + str(i) + "...")
    # 给URL添加时间戳参数,确保每次请求的URL唯一
    unique_url = "https://source.unsplash.com/random?ts=" + str(time.time())
    urllib.urlretrieve(unique_url, "image" + str(i) + ".jpg")

为什么原来的代码会重复下载?

当你反复请求https://source.unsplash.com/random这个一模一样的URL时,Unsplash的服务器会基于缓存策略返回之前的图片,目的是减少重复请求的服务器负载。而urllib.urlcleanup()只是清理urllib在本地生成的临时缓存文件,对服务器端的缓存完全起不到作用。

其他可选方案

如果你不想用时间戳,也可以用random模块生成随机数来做唯一标识:

import urllib
import random

num = 4
for i in range(1, num + 1):
    print("Downloading image #" + str(i) + "...")
    # 用随机数作为唯一参数
    unique_url = f"https://source.unsplash.com/random?rand={random.randint(1, 1000000)}"
    urllib.urlretrieve(unique_url, f"image{i}.jpg")

另外,如果你的Python版本是3.x,更推荐使用urllib.request模块(因为旧的urllib在3.x中是拆分后的子模块),不过核心解决逻辑还是给URL添加唯一参数。

内容的提问来源于stack exchange,提问作者kognise

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:06:34