разделы:

Скачивание по ссылкам из текстового списка в Python

Если перед вами, однажды встанет задача как скачать массово файлы используя Python, при этом имея готовые ссылки на эти файлы, в текстовом файле готовым списком, в качестве одного из вариантов решения, этот пост

Не так давно, захотелось мне скачать из vk все фотки скопом, свои и из группы, на всякий случай. После поисков был найден скрипт vk_photos, и в контексте стоявшей задачи, скачать все фото профиля через скрипт vk_photos, я стал разбираться. Пройдя по шагам через, успешную авторизацию, более или менее успешного создания файла со списком файлов картинок, но на этапе скачивания я застопорился. Скрипт просто не качал фотографии. И судя по поиску решений, не только у меня. В итоге у меня есть файл с ссылками, который можно подчистить удалив id пользователя или оставить как есть, но нет возможности скачать. В конечном итоге, был создан простой однопоточный скрипт на Python, который открывает указанный в нем файл со списком ссылок, создает нужные папки и скачивает туда по очереди все фотографии.

import urllib.request
import uuid
import os
import sys

list_file = '200603209.txt' #Name of the link list file
ext_file = '.jpg' #Extension of downloaded files

filename, file_extension = os.path.splitext(list_file)
try:
    if os.stat(list_file).st_size > 0:
        print("Processing...")
        if not os.path.isdir('dwlds'):
           os.makedirs('dwlds')
           print('Folder dwlds created')
        elif not os.path.isdir('dwlds/'+filename):
           os.makedirs('dwlds/'+filename)
           print('Folder '+filename+' created')
        with open(list_file) as file:
             while (line := file.readline().rstrip()):
                  rndname = str(uuid.uuid4())
                  print("File from:" + line + " - \n Saved as: " + str(rndname)+ ext_file)
                  urllib.request.urlretrieve(line, "dwlds/"+filename+"/"+str(rndname) + ext_file)
    else:
        print("Empty URL file ... exiting")
        sys.exit()
except OSError:
    print("URL file missing ... exiting")
    sys.exit()

Из минусов:
— нет многопоточности, но это осознанный шаг, чтобы избежать блокировок и пр..
— нет автоматического определения расширения файлов, из-за разнообразия ссылок.
— при битой ссылке, скрипт прерывается, но если это не делать, проблем больше.

В идеале, имея заготовку, можно заточить скрипт под свои конкретные нужды, но это в идеале и полностью самостоятельно. В данном примере, перед публикацией, скрипт был сильно упрощен. Были отброшены разбивка по имени файла, очистка списка ссылок от id и пр. Осталось только создание папки dwnlds в которой создается папка одноименная имени файлу, папка, куда и скачиваются файлы.

В скрипте указываем имя файла со списком и расширение скачиваемых файлов. Далее они переименовываются случайным образом и помещаются в новую папку.