Мне нужен эффективный способ загрузки многомиллионных файлов из списка URL-адресов в текстовом файле. Я хочу, чтобы файлы были сохранены с новыми именами (из другого текстового файла или где бы то ни было), поскольку URL-адреса являются длинными, динамически генерируемыми тарабарщинами и могут вызывать проблемы с максимальными длинами имен файлов и т. Д.Загрузите небольшие файлы
Я сначала попробовал wget, но был ограничен тот факт, что вы можете либо указать список URL-адресов из текстового файла, например:
wget.exe -i myURLlist.txt
или переименовать один загруженный файл с новым именем, например:
wget.exe -O myfilename1.jpg http://www.foo.com/longgibberish976876....2131.jpg
, но не оба. Поэтому мой скрипт должен был выполнить wget индивидуально (используя второй метод) для каждого файла. Это невероятно медленно из-за перезапуска TCP-соединения каждый раз и других накладных расходов (если вы передаете список URL-адресов в текстовом файле, wget пытается повторно использовать соединение, но тогда я не могу указать имена файлов).
Затем я попробовал завиток, который позволяет передавать несколько URL-адресов и имена файлов с помощью аргументов командной строки. например:
curl.exe
-o myfilename1.jpg http://www.foo.com/longgibberish976876....2131.jpg
-o myfilename2.jpg http://www.foo.com/longgibberish324....32432.jpg
-o .....
Это было увеличение скорости, так как завиток будет пытаться повторно использовать то же соединение для все URL, переданного ему. Тем не менее, я был ограничен партиями из 20 URL-адресов, прежде чем он начал пропускать файлы. Я не подтвердил, почему это произошло, но подозреваем, что максимальная длина в командной строке могла быть превышена. В любом случае это, конечно, не будет масштабироваться до миллиона или около того файлов. Я не нашел вариант передать текстовый файл для завивки так же, как вы можете, с помощью wget.
Какие варианты остались? Есть ли какой-то синтаксис для двух программ, которые я уже пробовал, о которых я не знаю, или мне нужен какой-то другой инструмент?
Я боюсь, что вы нажмете на стену, которую вам нужно будет перепрыгнуть с помощью некоторых пользовательских программ. Поскольку SO - это онлайн-сообщество для программистов, отвечающих на вопросы программирования, я предполагаю, что вы не боитесь вникать в программирование собственного решения. Попробуйте это на своем языке выбора и вернитесь, если вы столкнетесь с определенной проблемой программирования. –