PYTHON:使用请求将多个图像保存到文件夹

时间:2019-10-25 16:47:30

标签: python-requests

我需要将所有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.

1 个答案:

答案 0 :(得分:0)

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

问题在这里:

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

open()方法的第一个参数是文件路径。第二个参数是模式,您已将其设置为wb或写入/二进制。因此,在循环中,您每次都在重写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:
        ....

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

修改

您可以在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:
    ....