[windows] Чем скачать 400 000 картинок?

356ft85

Есть CSV файл из двух колонок, первая - URI адрес картинки в интернете, вторая - путь по которому надо сохранить её на диске. Какой софтиной решить задачку?

iravik

curl должен помочь

yroslavasako

wget умеет параллельно, а курл так может?

YUAL

Несколько курлов паралельно?

yroslavasako

ну wget читает из файла список URL и распределяет их между потоками, как только один завершается, запускается следующая закачка в списке. На курле для этого нужно будет изощрённый bash скрипт велосипедить

uncle17

а чо там изощренного
передаешь параметр и читаешь строки с (n-1)*1Е+5 по n*1E+5-1

yroslavasako

Ага. Первый пакет докачается, а второй успеет только наполовину, например. И у тебя уже будет не многопоточность, а однопоточность.

Troyn09

да но зачем, если все готово в wget?

serega1604

wget умеет параллельно,
интересно, почему документация об этом умалчивает?

356ft85

wget умеет параллельно, а курл так может?
напиши плиз вкратце, что надо сделать чтоб задачу выполнить?
с установкой Wget на винду я думаю справлюсь, а вот дальше что сделать, как скормить CSV файлу wget у?

Kira

вот так (powershell):
Get-Content a.csv | %{$data = $_.split(";"); Start-BitsTransfer $data[0] $data[1]}

YUAL

интересно, почему документация об этом умалчивает?
вероятно айвенго что-то перепутал. с кем не бывает?
http://free384.blogspot.ru/2012/02/aria2c-wget-ubuntu.html вот то что надо топикстартеру. просто как 3 копейки. есть бинарь под винду.
А "изощрёный" bash-скрипт для паралельного скачивания вгетом выглядит как-то так:
 cat list.txt | while read i ; do while [ `ps aux | grep wget | wc -l` -gt 5 ] ; do true ; done ; wget -q "$i" &  done 

С другой стороны, что топикстартеру от этого ни тепло ни холодно - у него винда.

YUAL

get-content a.csv | %{$data = $_.split(";"); Start-BitsTransfer $data[0] $data[1]}
ух ты ж блин до чего прогресс в винде дошёл. прям открваешь консоль, фигачишь туда и всё работает?

Kira

угу. Только не консоль, а powershell, который на клиентскую винду, кажется, надо отдельно ставить
upd: хотя в восьмерке второй powershell есть, но скрипт я писал на версии 3.0

Dasar

угу. Только не консоль, а powershell, который на клиентскую винду, кажется, надо отдельно ставить
идет по умолчанию, начиная с 7-ки

Marinavo_0507

get-content a.csv | %{$data = $_.split(";");
а чё, правильного парсера нет? типа в url не может быть такого символа?

Dasar

есть команда Import-Csv

al70

vbscript

Kira

типа того. Совсем труЪ выглядит как-то вот так:
import-csv a.txt -Delimiter ';' -Header url,path | %{Start-BitsTransfer $_.url $_.path}

yroslavasako

интересно, почему документация об этом умалчивает?
потому что я его перепутал. Прошу прощения.

serega1604

вероятно айвенго что-то перепутал. с кем не бывает?
да просто он слишком активно наезжал на curl, я уж думал может он какими-то тайными знаниями обладает.

yroslavasako

скорее не тайными, а смутными. Что курл - это для индивидуальной работы со страницами, а wget - для массовой. Вот теперь сижу и вспоминаю, от чего я такой вывод когда-то сделал.

serega1604

ну, может ещё из-за того, что curl не умеет рекурсивно обходить страницы, емнип, ну и из файла список урлов тоже не умеет брать.
при этом для работы с одним запросом у него параметров поболее.

356ft85

вот так (powershell):Get-Content a.csv | %{$data = $_.split(";"); Start-BitsTransfer $data[0] $data[1]}
в принципе если б не кол-во я бы просто кинул бы список в Download Master, предварительно преобразовав его в XML
не разу не работал в powershell - расскажи в кратце суть команды? берет входной файл и обрабатывает построчно, парсит в массив по точке с запятой, потом запускает для каждой строки битс_трансвер и с нужными параметрами?
качать будет одну за другой? можно ли сюда вставить задержку между запросами на сервак (не то чтоб очень надо, но в принципе может сервер банит если качать много в секунду)

Marinavo_0507

потом запускает для каждой строки битс_трансвер и с нужными параметрами?
качать будет одну за другой? можно ли сюда вставить задержку между запросами на сервак (не то чтоб очень надо, но в принципе может сервер банит если качать много в секунду)
насколько я понял, это используется тот же сервис, который в винде качает апдейты
наверное, у него есть глобальные настройки

Kira

да, ты всё правильно понял. для start-bitstransfer есть параметры позволяющие запустить его асинхронно да ещё и со списком проксей. Подробности можешь посмотреть в манах по Get-Help Start-BitsTransfer -detailed
чтобы была пауза между картинками попробуй как-то так
Get-Content a.csv | foreach{$data = $_.split(";"); Start-BitsTransfer $data[0] $data[1];Start-Sleep 2}
(или, если пауза нужна в миллисекундах, то Start-Sleep -Milliseconds 123)

356ft85

сработало, поставил плюсик
ещё надо не забывать делать Import-Module BitsTransfer

beluchy

вот еще забавный вариант

$ cat test.csv && echo '--' && awk -F\; 'BEGIN{all="all:"} {printf "\n%s:\n\twget -nv -O %s %s\n", $2,$2,$1; all = all" "$2;} END{print "\n"all}' test.csv > makefile && cat makefile && echo '--' && make all -j3

http://forumbgz.ru/user/10419.png;lexus.png
http://forumbgz.ru/user/10941.png;.png
http://forumbgz.ru/user/1719.gif;ajbka.gif
--

lexus.png:
wget -nv -O lexus.png http://forumbgz.ru/user/10419.png

.png:
wget -nv -O .png http://forumbgz.ru/user/10941.png

ajbka.gif:
wget -nv -O ajbka.gif http://forumbgz.ru/user/1719.gif

all: lexus.png .png ajbka.gif
--
wget -nv -O lexus.png http://forumbgz.ru/user/10419.png
wget -nv -O .png http://forumbgz.ru/user/10941.png
wget -nv -O ajbka.gif http://forumbgz.ru/user/1719.gif
2014-02-16 13:04:15 URL:http://forumbgz.ru/user/10419.png [8847/8847] -> "lexus.png" [1]
2014-02-16 13:04:15 URL:http://forumbgz.ru/user/10941.png [10821/10821] -> ".png" [1]
2014-02-16 13:04:15 URL:http://forumbgz.ru/user/1719.gif [81644/81644] -> "ajbka.gif" [1]
Оставить комментарий
Имя или ник:
Комментарий: