2010-08-07 5 views
156

Używam wget do pobierania zawartości strony, ale wget pobiera pliki jeden po drugim.Pobieranie wget z wieloma jednoczesnymi połączeniami

Jak mogę pobrać wget przy użyciu 4 jednoczesnych połączeń?

+3

Podobna kwestia z ładnym rozwiązania: http://stackoverflow.com/questions/7577615/parallel-wget-in-bash – JohnEye

+0

Spójrz na ten projekt https://github.com/rockdaboot/wget2 – r3x

Odpowiedz

8

wget nie można pobrać w wielu połączeniach, zamiast tego można spróbować użyć innego programu, takiego jak aria2.

32

znalazłem (chyba) a solution

W procesie pobierania kilka tysięcy plików dziennika z jednego serwera do następnego nagle miał potrzebę zrobić jakiś poważny wielowątkowe pobieranie w BSD, najlepiej z Wgetem, bo to była najprostsza droga. Mogłem wymyślić, jak sobie z tym poradzić. Trochę rozglądać doprowadziło mnie do ten mały samorodek:

wget -r -np -N [url] & 
wget -r -np -N [url] & 
wget -r -np -N [url] & 
wget -r -np -N [url] 

Wystarczy powtórzyć wget -r -np -N [url] tak wiele wątków, jak trzeba ... Teraz biorąc pod uwagę to nie jest ładna i nie są z pewnością lepsze sposoby wykonywania to, ale jeśli chcesz coś szybko i brudną powinno załatwić sprawę ...

Uwaga: opcja -N sprawia, że ​​tylko „nowsze” pliki wget pobierania, co oznacza, że ​​nie będzie zastąpić lub ponownie pobrać pliki chyba ich sygnatury czasowe zmieniają się na serwerze.

+11

Ale to nie pobiera całego zestawu artefaktów dla każdy proces? –

+7

@KaiMattern: dodaj opcję '-nc':" no clobber "- powoduje, że wget ignoruje pobrane (nawet częściowo) pliki. –

+0

Miałem listę obrazów, które musiałem pobrać, a to działało również dla mnie: 'wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc' Bardzo brzydki , ale hej, działa. : P –

162

użyć aria2:

aria2c -x 16 [url] 
#   | 
#   | 
#   | 
#   ----> the number of connections 

http://aria2.sourceforge.net

kocham go !!

+20

Nie widzę, jak to pomaga pobrać stronę internetową - wygląda na to, że pobiera tylko 1 plik. Jeśli to prawda - głosy powinny być -ve. – Stephen

+7

Zgadzam się, to nie jest dobra odpowiedź, ponieważ aria2 nie może robić sieci lub ftp dublowania jak wget czy lftp. lftp wykonuje dublowanie, a także obsługuje wiele połączeń. – Anachronist

+7

wow! aria2 jest niesamowita – Orlo

9

Sugeruję użycie httrack.

ex: httrack -v -w http://example.com/

Będzie to lustro z 8 jednoczesnych połączeń jako domyślny. Httrack ma mnóstwo opcji do grania. Spójrz.

+2

Nie obsługuje ciasteczek sesyjnych dostarczanych przez użytkownika, między innymi ... –

+0

pliki do pobrania WOLNO i generalnie jest to śmieć – aaa90210

+0

@ aaa90210: Byłoby wspaniale, gdybyś zwięźle wyjaśnił braki w programach. Komentarz ArturaBodery jest znacznie bardziej pouczający. – Richard

9

Jak wspomniałem już o innych plakatach, sugeruję, aby rzucić okiem na aria2. Ze strony podręcznika Ubuntu dla wersji 1.16.1:

aria2 to narzędzie do pobierania plików. Obsługiwane protokoły to HTTP (S), FTP, BitTorrent i Metalink. aria2 może pobrać plik z wielu źródeł/protokołów i próbuje wykorzystać maksymalną przepustowość pobierania. Obsługuje pobieranie pliku z HTTP (S)/FTP i BitTorrent w tym samym czasie, podczas gdy dane pobierane z HTTP (S)/FTP są przesyłane do roju BitTorrent. Używając sum kontrolnych porcji Metalink, aria2 automatycznie sprawdza fragmenty danych podczas pobierania pliku, takiego jak BitTorrent.

Możesz użyć flagi -x aby określić maksymalną liczbę połączeń na serwer (domyślnie: 1):

aria2c -x 16 [url] 

Jeżeli ten sam plik jest dostępny z wielu miejsc, można wybrać, aby pobrać od wszyscy. Użyj flagi -j, aby określić maksymalną liczbę równoległych pobrań dla każdego statycznego identyfikatora URI (domyślnie: 5).

aria2c -j 5 [url] [url2] 

Wystarczy popatrzeć na http://aria2.sourceforge.net/ uzyskać więcej informacji. W celu uzyskania informacji o użytkowaniu strona podręcznika ma charakter opisowy i zawiera sekcję na dole z przykładami użycia. Wersję online można znaleźć pod adresem http://aria2.sourceforge.net/manual/en/html/README.html.

9

Nowym (ale jeszcze nie wydanym) narzędziem jest Mget. Posiada już wiele opcji znanych z Wget i posiada bibliotekę, która pozwala na łatwe osadzanie (rekursywne) pobierania do własnej aplikacji.

Aby odpowiedzieć na to pytanie:

mget --num-threads=4 [url]

UPDATE

MGET jest teraz rozwijana jako Wget2 z wielu bugów i innych funkcji (np HTTP/2 support).

--num-threads jest teraz --max-threads.

+0

Miłe znalezisko. Dziękuję Ci! – r3x

+0

wszelkie wskazówki dotyczące instalacji wget2 na Macu? Strona tylko dokumentuje, jak zainstalować ją ze źródła i ma problemy z uzyskaniem autopointu – Chris

+0

W skrypcie TravisCI używamy homebrew do instalacji gettext (który zawiera autopunkt). Spójrz na .travis_setup.sh z repozytorium wget2. – rockdaboot

83

Wget nie obsługuje wielu połączeń z gniazdami w celu przyspieszenia pobierania plików.

Myślę, że możemy zrobić trochę lepiej niż odpowiedź gmariana.

Prawidłowym sposobem jest użycie aria2.

aria2c -x 16 -s 16 [url] 
#   | | 
#   | | 
#   | | 
#   ---------> the number of connections here 
+11

Aby udokumentować '-x, --max-connection-per-server = NUM ​​Maksymalna liczba połączeń do jednego serwera dla każdego pobrania. Możliwe wartości: 1-16 Domyślnie: 1' i '-s, --split = N Pobierz plik przy użyciu N połączeń. Jeśli podano więcej niż N identyfikatorów URI, pierwsze N ​​URI są używane, a pozostałe adresy URL są używane do tworzenia kopii zapasowych. Jeśli podano mniej niż N identyfikatorów URI, te adresy URL są używane więcej niż jeden raz, więc łączna liczba połączeń N jest generowana jednocześnie . Liczba połączeń z tym samym hostem jest ograniczona przez opcję --max-connection-per-server. Zobacz także opcję --min-split-size. Możliwe wartości: 1- * Domyślnie: 5' – Nick

+0

Dzięki za opracowanie parametrów, Nick. –

+2

Sama opcja -s już nie dzieli pliku z jednego serwera od wersji 1.10. Trzeba użyć --max-connection-per-server razem, aby wymusić ustanowienie wielu połączeń. Zobacz dokumentację aria2: 'Informacje o liczbie połączeń Od wydania 1.10.0, aria2 domyślnie używa 1 połączenia na hosta i ma ograniczenie rozmiaru segmentu o wielkości 20 MBi. . Tak więc niezależnie od wartości określonej za pomocą opcji -s, , używa ona 1 połączenia na hosta. Aby zachowywał się jak 1,9.x, użyj --max-connection-per-server = 4 - min-split-size = 1M. " –

13

Kolejny program, który może to zrobić axel.

axel -n <NUMBER_OF_CONNECTIONS> URL 

Ubuntu man page.

+2

ten program pozwala na nieograniczoną liczbę połączeń, co jest bardzo przydatne w niektórych przypadkach. – uglide

+0

Świetne narzędzie. dla centos6.xi używany http://rpm.pbone.net/index.php3/stat/4/idpl/16390122/dir/redhat_el_6/com/axel-2.4-1.el6.rf.x86_64.rpm.html –

24

Ponieważ GNU równoległy nie był jeszcze wymienić podam inaczej:

cat url.list | parallel -j 8 wget -O {#}.html {} 
+2

To ciekawe podejście. Nie dotyczy to sytuacji, gdy musisz pobrać ogromny plik, a prędkość połączenia jest ograniczona, ale może być przydatna podczas pobierania wielu plików. –

+0

Uruchomienie tego polecenia spowoduje wyświetlenie listy 8 razy, nie? Zrobiłem to w ten sam sposób i zamiast przetwarzać każdą linię za pomocą 8 paraleli, po prostu przetwarza całą listę 8 razy. – DomainsFeatured

+3

Nie, dzieli listę na 8 zadań. –

0

make łatwo parallelised (np make -j 4). Na przykład, oto prosty Makefile używam do pobierania plików równolegle przy użyciu wget:

BASE=http://www.somewhere.com/path/to 
FILES=$(shell awk '{printf "%s.ext\n", $$1}' filelist.txt) 
LOG=download.log 

all: $(FILES) 
    echo $(FILES) 

%.ext: 
    wget -N -a $(LOG) $(BASE)/[email protected] 

.PHONY: all 
default: all 
2

Oni zawsze mówią, że to zależy, ale jeśli chodzi o dublowanie stronę internetową Najlepszym istnieje httrack. Jest super szybki i łatwy w obsłudze. Jedynym minusem jest to, że jest to forum pomocy technicznej, ale możesz znaleźć drogę, korzystając z numeru official documentation. Ma interfejs GUI i CLI i obsługuje pliki cookie po prostu przeczytaj dokumenty. To jest najlepsze.(Be cureful z tego narzędzia można pobrać całą sieć na dysku twardym)

httrack -c8 [url] 

Według numeru domyślna maksymalna jednoczesnych połączeń ograniczony do 8 aby uniknąć przeciążenia serwera