miraage
@miraage
Старый прогер

Как можно оптимизировать скрипт?

Понадобилось мне скачать целый албом из ВК. 120+ фоток, самому лень. Поставил плагин к Chrome, получил список ссылок на фотки, положил их в текстовый файл.


Думаю, дай напишу на PHP скрипт, который за меня все сделает. Но тут я вспоминаю, что хочется Python выучить, поэтому недолго думая определился с инструментом. Вспомнив недавно прочитанный Dive into Python и загуглив пару вопросов касаемо самой скачки написал следующий код.

# Imports
import urllib
import os

# Initialize downloader
web = urllib.URLopener()

# Path/files
cwd = os.getcwd()
urls = os.path.join(cwd, 'data.txt')

# Read the file
sock = open(urls)
data = [item.strip() for item in sock.readlines()]
sock.close()

# Download files
for url in data:
    # Get the filename
    basename = os.path.basename(url)
    
    # Destination..
    dest = os.path.join(cwd, 'temp', basename)

    # Process download
    web.retrieve(url, dest)

    # Print we are done
    print 'Done %s' % dest



Вопрос такой: что можно было сделать лучше? Может где-то можно было проще?


Уже вижу, что необязательно (или все же надо?) абсолютный путь к файлам указывать, но это у меня с PHP привычка.
  • Вопрос задан
  • 2768 просмотров
Решения вопроса 1
avalak
@avalak
> Вопрос такой: что можно было сделать лучше? Может где-то можно было проще?

Использовать wget.
-i, --input-file=FILE download URLs found in local or external FILE.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@dronnix
Для тренировки можно сделать обработку исключений, чтобы скрипт не падал на первой битой ссылке, а выдавал ошибку в stderr
Ответ написан
@tgz
Если цель потренироваться в программировании, то можно переписать на параллельную закачку.
В общем смотрите в сторону asyncore или greenlet'ов.
Ответ написан
LightSUN
@LightSUN
Всякие качалки (например Download Master) могут прям из буфера брать список файлов для закачки. Конретно DM (тока он сейчас есть) может также из файла импортировать список адресов для закачки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы