如何使用urllib或shutil将网络图片下载到指定本地目录
解答
你当前用的requests+shutil的下载方案完全支持自定义存储路径,不需要切换到urllib.urlretrieve实现,核心调整逻辑非常简单:给文件写入函数传入拼接好的目标路径,同时提前确保目标目录存在即可。
具体修改步骤
- 先定义你想要存储图片的目标目录路径
- 用
os.makedirs()自动创建不存在的目录,避免写入时触发路径不存在的报错 - 用
os.path.join()把目录路径和文件名拼接成跨系统兼容的完整存储路径,传给open()函数即可
修改后的可运行代码如下:
import requests import shutil import os url = "https://www.lamborghini.com/sites/it-en/files/DAM/lamborghini/facelift_2019/homepage/families-gallery/2022/04_12/family_chooser_tecnica_m.png" # 替换成你自己的目标存储目录即可,支持相对路径/绝对路径 # Windows路径示例:r"D:\local_pics\car_images" # Mac/Linux路径示例:"/home/xxx/pics/car_images" target_save_dir = "./downloaded_car_images" # 自动创建目录,目录已存在时不会抛出异常 os.makedirs(target_save_dir, exist_ok=True) file_name = input("save image as :") # 注:原代码硬编码加.jpg后缀和示例url的png格式不匹配,可根据实际资源类型调整后缀 file_name += ".png" # 拼接得到完整的文件存储路径 full_file_path = os.path.join(target_save_dir, file_name) res = requests.get(url, stream=True) if res.ok: with open(full_file_path, "wb") as f: shutil.copyfileobj(res.raw, f) print("image successfully downloaded to: ", full_file_path) else: print("Download failed: status code {}\n{}".format(res.status_code, res.text))
注意事项
- 写Windows本地路径时,直接复制资源管理器的带反斜杠
\的路径会触发字符串转义问题,要么把所有反斜杠替换为正斜杠/,要么在路径字符串前加r标记为原生字符串 - 尽量用
os.path.join()拼接路径,不要手动拼接斜杠,该方法会自动适配Windows、macOS、Linux不同系统的路径分隔符,避免跨系统运行报错 - 这个路径指定逻辑同样适用于你贴的urllib原生写文件的方案,只要把完整路径传给
open()即可,不是只有urlretrieve支持自定义存储位置
内容的提问来源于stack exchange,提问作者Sloth99
相关产品推荐
相关产品推荐

