PYTHON: сохранение нескольких изображений в папку с использованием запросов - PullRequest
1 голос
/ 25 октября 2019

Мне нужно сохранить все 6 изображений в локальной папке.

Найденный мной сценарий перезаписывает отдельные файлы несколько раз и в итоге выдает только 1 изображение

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 голосов
/ 25 октября 2019

Сценарий переписывает один и тот же файл каждый раз, потому что вы используете одно и то же имя файла, оно никогда не меняется.

Проблема здесь:

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:
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...