首页 > 解决方案 > PYTHON:使用请求将多个图像保存到文件夹中

问题描述

我需要将所有 6 张图像保存到本地文件夹中。

我发现的脚本多次重写单个文件,最终只生成一张图片

import requests

img_list = ["https://ae01.alicdn.com/kf/HTB1tT70vhuTBuNkHFNRq6A9qpXa3.jpg", "https://ae01.alicdn.com/kf/HTB12HGkvwKTBuNkSne1q6yJoXXaR.jpg", "https://ae01.alicdn.com/kf/HTB1_yDic56guuRjy0Fmq6y0DXXaY.jpg", "https://ae01.alicdn.com/kf/HTB1RopgXffsK1RjSszgq6yXzpXa5.jpg", "https://ae01.alicdn.com/kf/HTB1R6sJXgHqK1RjSZFkq6x.WFXaF.jpg", "https://ae01.alicdn.com/kf/HTB1_XlhXojrK1RkHFNRq6ySvpXaR.jpg"]
for x in blob:
    with open('/Users/reezalaq/PycharmProjects/wholesale/img/pic1.jpg', 'wb') as handle:
        response = requests.get(x, stream=True)

        if not response.ok:
            print(response)

        for block in response.iter_content(1024):
            if not block:
                break

            handle.write(block)```


It needs to save all 6 images separately. No error message so far.

标签: python-requests

解决方案


该脚本每次都重写同一个文件,因为您使用的是相同的文件名,它永远不会改变。

问题在这里:

with open('/Users/reezalaq/PycharmProjects/wholesale/img/pic1.jpg', 'wb')

open()方法的第一个参数是文件路径。第二个参数是模式,您已设置为wb或 write/binary。所以在你循环中,你正在重写pic1.jpg每次的文件内容。(参见:https ://docs.python.org/3.5/library/functions.html#open )。

您可以在列表中预先定义文件名列表并将其用作文件名或执行更动态的操作,例如:

for img in img_list:
    file_name = img.split('/')[-1]
    with open(file_name, 'wb') as handle:
        ....

这将从您正在下载它的网站(例如,1HTB1tT70vhuTBuNkHFNRq6A9qpXa3.jpg对于第一个 URL)获取图像的文件名,用作您系统上的文件名。(注意:这也假设名称是唯一的)。

编辑

您可以在 for 循环之前定义文件夹路径。然后,您可以更改open()方法以包含该路径。所以:

import os # do this at the top of your file

folder_path = '/Users/reezalaq/PycharmProjects/wholesale/img/'

for img in img_list:
    with open(os.path.join(folder_path, file_name), 'wb') as handle:
    ....

推荐阅读