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
8
Zgadzam się, to nie jest dobra odpowiedź, ponieważ aria2 nie może wykonywać kopii lustrzanych w sieci lub ftp, takich jak wget lub lftp. lftp wykonuje kopię lustrzaną, a także obsługuje wiele połączeń.
Anachronista
9
Nie zapomnij -spodać liczby podziałów i -kokreślić minimalny rozmiar na segment podziału - w przeciwnym razie możesz nigdy nie osiągnąć -xmaksymalnych połączeń.
Bob
2
@Stephen ma to na celu znacznie szybsze pobieranie bardzo dużych plików ze stron internetowych przy użyciu wielu gniazd na serwerze zamiast jednego. Nie jest to przeznaczone do skrobania strony internetowej.
gabeio
nie obsługuje skarpet *
Fedcomp
111
Wget nie obsługuje wielu połączeń gniazd w celu przyspieszenia pobierania plików.
Myślę, że możemy zrobić trochę lepiej niż odpowiedź gminy.
Do udokumentowania -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1i-s, --split=N Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URLs are used for backup. If less than N URIs are given, those URLs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the --max-connection-per-server option. See also the --min-split-size option. Possible Values: 1-* Default: 5
Nick
Dzięki za opracowanie parametrów, Nick.
thomas.han
4
Sama opcja -s nie dzieli już pliku z jednego serwera od czasu wydania 1.10. Należy użyć --max-connection-per-server razem, aby wymusić ustanowienie wielu połączeń. Zobacz dokumentację aria2: About the number of connections Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB segment size restriction. So whatever value you specify using -s option, it uses 1 connection per host. To make it behave like 1.9.x, use --max-connection-per-server=4 --min-split-size=1M.
Samuel Li,
1
Skrót aktualizacji @ SamuelLi jest aria2c -x 4 -k 1M urli działał dla mnie dobrze (serwer z limitem 100 000 na połączenie pozwala mi pobierać przy 400 000 ze wspomnianymi parametrami)
EkriirkE
Krytycznie, aria2czy nie obsługują rekurencyjne pobieranie HTTP, dzięki czemu wymiana normom dla wgetjeśli -rpożądane.
user2943160
55
Ponieważ GNU równolegle nie zostało jeszcze wspomniane, pozwól mi podać inny sposób:
To ciekawe podejście. Nie ma to zastosowania, gdy trzeba pobrać ogromny plik, a prędkość połączenia jest ograniczona, ale może być przydatna podczas pobierania wielu plików.
Nikola Petkanski
Uruchomienie tego polecenia uruchomiłoby listę 8 razy, nie? Zrobiłem to w ten sam sposób i zamiast przetwarzać każdą linię z 8 równoległymi procesami, po prostu przetwarza całą listę 8 razy.
DomainsFeatured 18.09.16
4
Nie, dzieli listę na 8 miejsc pracy
Nikolay Shmyrev
Okej, zdecydowanie robię coś dziwnego. Rozgryzę to. Dziękuję za szybką odpowiedź.
DomainsFeatured 18.09.16
1
Jest to jednak bezużyteczne użyciecat . W tym ograniczonym kontekście jest to całkiem nieszkodliwe, ale być może nie chcesz stosować tego anty-wzoru.
Podczas pobierania kilku tysięcy plików dziennika z jednego serwera na drugi nagle miałem potrzebę poważnego pobierania wielowątkowego w BSD, najlepiej z Wget, ponieważ był to najprostszy sposób, w jaki mogłem sobie z tym poradzić. Trochę się rozejrzałem i doprowadziłem do tego małego samorodka:
Po prostu powtórz wget -r -np -N [url]tyle wątków, ile potrzebujesz ... Teraz biorąc pod uwagę, że to nie jest ładne i są na pewno lepsze sposoby na zrobienie tego, ale jeśli chcesz czegoś szybkiego i brudnego, powinno wystarczyć ...
Uwaga: opcja -Npowoduje wgetpobieranie tylko „nowszych” plików, co oznacza, że nie będzie zastępować ani ponownie pobierać plików, chyba że ich znacznik czasu zmieni się na serwerze.
Ale czy to nie pobiera całego zestawu artefaktów dla każdego procesu?
Kai Mattern
10
@KaiMattern: dodaj -ncopcję: „bez clobber” - powoduje, że wget ignoruje często pobierane (nawet częściowo) pliki.
SF.
1
Miałem listę zdjęć, które musiałem pobrać, i to również działało dla mnie: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncBardzo brzydkie, ale hej, to działa. : P
Jared
1
Zerwanie jednego z tych połączeń z jakiegoś powodu daje niekompletne pliki, bez dotykania innych połączeń. Ta metoda powoduje problemy z integralnością.
muhammedv,
-bFlaga będzie prowadzony proces wget w tle, jako alternatywa dla atakujących za &kontrolę pracy wbudowanej. Polecenie STDOUT zostanie zapisane w wget-log, jeśli -o <filename>nie zostanie określone. Dobry do pisania skryptów. Zobacz wget (1), aby uzyskać więcej informacji.
Paul
21
Innym programem, który może to zrobić, jest axel.
axel -n <NUMBER_OF_CONNECTIONS> URL
W przypadku szybkiego uwierzytelniania HTTP,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
Axel nie może wykonać podstawowego uwierzytelniania HTTP :(
rustyx
1
Zwykle tak robięaxel -n 4 "user:pasword@http://domain.tld/path/file.ext"
lordzie Loh.
czy mogę użyć Axela do rekurencyjnego pobrania całego folderu?
Ryan Arief
17
Nowym (ale jeszcze nie wydanym) narzędziem jest Mget . Ma już wiele opcji znanych z Wget i zawiera bibliotekę, która pozwala łatwo osadzić (rekurencyjne) pobieranie we własnej aplikacji.
Odpowiedzieć na Twoje pytanie:
mget --num-threads=4 [url]
AKTUALIZACJA
Mget jest teraz rozwijany jako Wget2 z wieloma naprawionymi błędami i dodatkowymi funkcjami (np. Obsługa HTTP / 2).
jakieś wskazówki, jak zainstalować wget2 na komputerze Mac? Strona dokumentuje tylko, jak zainstalować ją ze źródła i mieć problemy z uzyskaniem autopunktu
Chris
W naszym skrypcie TravisCI używamy homebrew do instalowania gettext (który obejmuje autopunkt). Zajrzyj na .travis_setup.sh z repozytorium wget2.
rockdaboot
13
Zdecydowanie sugeruję użycie httrack.
dawny: httrack -v -w http://example.com/
Będzie domyślnie wykonywać kopię lustrzaną z 8 jednoczesnymi połączeniami. Httrack ma mnóstwo opcji do gry. Spójrz.
@ aaa90210: Byłoby wspaniale, gdybyś zwięźle wyjaśnił braki programów. Komentarz Artura Bodery jest znacznie bardziej pouczający.
Richard
@ArturBodera Możesz dodać plik cookie.txt do folderu, z którego uruchamiasz swój program, i automatycznie doda te pliki cookie do nagłówka pobierania.
Bertoncelj1
httrack nie obsługuje następujących przekierowań
Chris Hunt
11
Jak wspomnieli inni plakaty, sugeruję przyjrzeć się 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 pobrane z HTTP (S) / FTP są przesyłane do roju BitTorrent. Korzystając z sum kontrolnych Metalink, aria2 automatycznie sprawdza poprawność fragmentów danych podczas pobierania pliku takiego jak BitTorrent.
Możesz użyć -xflagi, aby określić maksymalną liczbę połączeń na serwer (domyślnie: 1):
aria2c -x 16 [url]
Jeśli ten sam plik jest dostępny z wielu lokalizacji, możesz pobrać z nich wszystkich. Użyj -jflagi, aby określić maksymalną liczbę równoległych pobrań dla każdego statycznego identyfikatora URI (domyślnie: 5).
Zawsze mówią, że to zależy, ale jeśli chodzi o tworzenie kopii lustrzanej strony internetowej, najlepszy jest httrack . Jest super szybki i łatwy w obsłudze. Jedynym minusem jest to, że jest to tak zwane forum pomocy technicznej, ale możesz znaleźć swoją drogę, korzystając z oficjalnej dokumentacji . Ma zarówno interfejs GUI, jak i interfejs CLI. Obsługuje pliki cookie. Przeczytaj dokumenty. To jest najlepsze. (Bądź ostrożny dzięki temu narzędziu, możesz pobrać całą sieć na dysk twardy).
httrack -c8 [url]
Domyślnie maksymalna liczba jednoczesnych połączeń jest ograniczona do 8, aby uniknąć przeciążenia serwera
służy xargsdo wgetpracy równoległej w wielu plikach
#!/bin/bash
mywget()
{
wget "$1"
}
export -f mywget
# run wget in parallel using 8 thread/connection
xargs -P 8 -n 1 -I {} bash -c "mywget '{}'" < list_urls.txt
Opcje Aria2, Właściwy sposób pracy z plikami mniejszymi niż 20 MB
aria2c -k 2M -x 10 -s 10 [url]
-k 2M podziel plik na porcję 2 MB
-klub --min-split-sizema domyślną wartość 20 MB, jeśli nie ustawisz tej opcji i plik poniżej 20 MB, będzie działał tylko w jednym połączeniu, bez względu na wartość -xlub-s
Rozważ użycie wyrażeń regularnych lub globowania FTP . Dzięki temu możesz zacząć wget wiele razy z różnymi grupami początkowych nazw plików w zależności od ich częstotliwości występowania.
Oto na przykład sposób synchronizacji folderu między dwoma serwerami NAS:
Pierwszy wget synchronizuje wszystkie pliki / foldery zaczynające się od, 0, 1, 2... F, G, Ha drugi wątek synchronizuje wszystko inne.
Był to najłatwiejszy sposób synchronizacji między NAS z jednym portem Ethernet 10G (10.0.0.100) a NAS z dwoma portami Ethernet 1G (10.0.0.10 i 10.0.0.11). Połączyłem dwa wątki wget --bind-addressdo różnych portów Ethernet i nazwałem je równolegle, umieszczając &na końcu każdej linii. Dzięki temu mogłem skopiować ogromne pliki z łącznym 2x 100 MB / s = 200 MB / s.
Odpowiedzi:
użyj aria2:
http://aria2.sourceforge.net
Kocham to !!
źródło
-s
podać liczby podziałów i-k
określić minimalny rozmiar na segment podziału - w przeciwnym razie możesz nigdy nie osiągnąć-x
maksymalnych połączeń.Wget nie obsługuje wielu połączeń gniazd w celu przyspieszenia pobierania plików.
Myślę, że możemy zrobić trochę lepiej niż odpowiedź gminy.
Prawidłowym sposobem jest użycie
aria2
.źródło
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
i-s, --split=N Download a file using N connections. If more than N URIs are given, first N URIs are used and remaining URLs are used for backup. If less than N URIs are given, those URLs are used more than once so that N connections total are made simultaneously. The number of connections to the same host is restricted by the --max-connection-per-server option. See also the --min-split-size option. Possible Values: 1-* Default: 5
About the number of connections Since 1.10.0 release, aria2 uses 1 connection per host by default and has 20MiB segment size restriction. So whatever value you specify using -s option, it uses 1 connection per host. To make it behave like 1.9.x, use --max-connection-per-server=4 --min-split-size=1M.
aria2c -x 4 -k 1M url
i działał dla mnie dobrze (serwer z limitem 100 000 na połączenie pozwala mi pobierać przy 400 000 ze wspomnianymi parametrami)aria2
czy nie obsługują rekurencyjne pobieranie HTTP, dzięki czemu wymiana normom dlawget
jeśli-r
pożądane.Ponieważ GNU równolegle nie zostało jeszcze wspomniane, pozwól mi podać inny sposób:
źródło
cat
. W tym ograniczonym kontekście jest to całkiem nieszkodliwe, ale być może nie chcesz stosować tego anty-wzoru.Znalazłem (prawdopodobnie) rozwiązanie
Uwaga: opcja
-N
powodujewget
pobieranie tylko „nowszych” plików, co oznacza, że nie będzie zastępować ani ponownie pobierać plików, chyba że ich znacznik czasu zmieni się na serwerze.źródło
-nc
opcję: „bez clobber” - powoduje, że wget ignoruje często pobierane (nawet częściowo) pliki.wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
Bardzo brzydkie, ale hej, to działa. : P-b
Flaga będzie prowadzony proces wget w tle, jako alternatywa dla atakujących za&
kontrolę pracy wbudowanej. Polecenie STDOUT zostanie zapisane w wget-log, jeśli-o <filename>
nie zostanie określone. Dobry do pisania skryptów. Zobacz wget (1), aby uzyskać więcej informacji.Innym programem, który może to zrobić, jest
axel
.W przypadku szybkiego uwierzytelniania HTTP,
Strona podręcznika systemu Ubuntu .
źródło
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Nowym (ale jeszcze nie wydanym) narzędziem jest Mget . Ma już wiele opcji znanych z Wget i zawiera bibliotekę, która pozwala łatwo osadzić (rekurencyjne) pobieranie we własnej aplikacji.
Odpowiedzieć na Twoje pytanie:
mget --num-threads=4 [url]
AKTUALIZACJA
Mget jest teraz rozwijany jako Wget2 z wieloma naprawionymi błędami i dodatkowymi funkcjami (np. Obsługa HTTP / 2).
--num-threads
jest teraz--max-threads
.źródło
Zdecydowanie sugeruję użycie httrack.
dawny:
httrack -v -w http://example.com/
Będzie domyślnie wykonywać kopię lustrzaną z 8 jednoczesnymi połączeniami. Httrack ma mnóstwo opcji do gry. Spójrz.
źródło
Jak wspomnieli inni plakaty, sugeruję przyjrzeć się aria2 . Ze strony podręcznika Ubuntu dla wersji 1.16.1:
Możesz użyć
-x
flagi, aby określić maksymalną liczbę połączeń na serwer (domyślnie: 1):Jeśli ten sam plik jest dostępny z wielu lokalizacji, możesz pobrać z nich wszystkich. Użyj
-j
flagi, aby określić maksymalną liczbę równoległych pobrań dla każdego statycznego identyfikatora URI (domyślnie: 5).Więcej informacji można znaleźć na stronie http://aria2.sourceforge.net/ . Aby uzyskać informacje o użytkowaniu, strona man jest naprawdę opisowa i ma na dole sekcję z przykładami użycia. Wersja online znajduje się na stronie http://aria2.sourceforge.net/manual/en/html/README.html .
źródło
wget nie mogę pobrać w wielu połączeniach, zamiast tego możesz spróbować użyć innego programu, takiego jak aria2.
źródło
spróbuj pcurl
http://sourceforge.net/projects/pcurl/
używa curl zamiast wget, pobieranie w 10 segmentach równolegle.
źródło
posługiwać się
w sites.txt wpisz 1 adres URL w wierszu, przykład:
źródło
Zawsze mówią, że to zależy, ale jeśli chodzi o tworzenie kopii lustrzanej strony internetowej, najlepszy jest httrack . Jest super szybki i łatwy w obsłudze. Jedynym minusem jest to, że jest to tak zwane forum pomocy technicznej, ale możesz znaleźć swoją drogę, korzystając z oficjalnej dokumentacji . Ma zarówno interfejs GUI, jak i interfejs CLI. Obsługuje pliki cookie. Przeczytaj dokumenty. To jest najlepsze. (Bądź ostrożny dzięki temu narzędziu, możesz pobrać całą sieć na dysk twardy).
Domyślnie maksymalna liczba jednoczesnych połączeń jest ograniczona do 8, aby uniknąć przeciążenia serwera
źródło
służy
xargs
dowget
pracy równoległej w wielu plikachOpcje Aria2, Właściwy sposób pracy z plikami mniejszymi niż 20 MB
-k 2M
podziel plik na porcję 2 MB-k
lub--min-split-size
ma domyślną wartość 20 MB, jeśli nie ustawisz tej opcji i plik poniżej 20 MB, będzie działał tylko w jednym połączeniu, bez względu na wartość-x
lub-s
źródło
make
można łatwo sparaliżować (npmake -j 4
.). Na przykład oto prosty,Makefile
którego używam do równoległego pobierania plików za pomocą wget:źródło
Rozważ użycie wyrażeń regularnych lub globowania FTP . Dzięki temu możesz zacząć wget wiele razy z różnymi grupami początkowych nazw plików w zależności od ich częstotliwości występowania.
Oto na przykład sposób synchronizacji folderu między dwoma serwerami NAS:
Pierwszy wget synchronizuje wszystkie pliki / foldery zaczynające się od,
0, 1, 2... F, G, H
a drugi wątek synchronizuje wszystko inne.Był to najłatwiejszy sposób synchronizacji między NAS z jednym portem Ethernet 10G (10.0.0.100) a NAS z dwoma portami Ethernet 1G (10.0.0.10 i 10.0.0.11). Połączyłem dwa wątki wget
--bind-address
do różnych portów Ethernet i nazwałem je równolegle, umieszczając&
na końcu każdej linii. Dzięki temu mogłem skopiować ogromne pliki z łącznym 2x 100 MB / s = 200 MB / s.źródło