Ich sehe nicht, wie dies beim Herunterladen einer Website hilft - es sieht so aus, als würde nur 1 Datei heruntergeladen. Wenn dies zutrifft, sollten die Stimmen -ve sein.
Stephen
8
Ich stimme zu, dies ist keine gute Antwort, da aria2 keine Web- oder FTP-Spiegelung wie wget oder lftp durchführen kann. lftp spiegelt und unterstützt mehrere Verbindungen.
Anachronist
9
Vergessen Sie nicht -s, die Anzahl der Teilungen und -kdie Mindestgröße pro Teilungssegment anzugeben. Andernfalls erreichen Sie möglicherweise nie die -xmaximale Anzahl von Verbindungen.
Bob
2
@Stephen Dies dient dazu, sehr große Dateien viel schneller von Websites herunterzuladen, indem mehrere Sockets anstelle von einem auf den Server verwendet werden. Dies ist nicht zum Scrapen einer Website gedacht.
gabeio
unterstützt keine Socken *
Fedcomp
111
Wget unterstützt keine Verbindungen mit mehreren Sockets, um das Herunterladen von Dateien zu beschleunigen.
Ich denke, wir können ein bisschen besser als gmarian antworten.
Zu dokumentieren -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1und-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
Vielen Dank für die Ausarbeitung der Parameter, Nick.
Thomas.han
4
Die Option -s allein teilt seit der Version 1.10 keine Datei mehr von einem einzelnen Server auf. Man muss --max-connection-per-server zusammen verwenden, um den Aufbau mehrerer Verbindungen zu erzwingen. Siehe aria2 Dokumentation: 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
Die Abkürzung von @ SamuelLis Update ist aria2c -x 4 -k 1M urlund hat gut für mich funktioniert (ein Server mit einem Limit von 100.000 pro Verbindung lässt mich bei 400.000 mit diesen Parametern herunterladen)
EkriirkE
Kritisch, aria2unterstützt keine rekursiven HTTP-Downloads, was es zu einem minderwertigen Ersatz macht, wgetwenn dies -rgewünscht wird.
user2943160
54
Da GNU parallel noch nicht erwähnt wurde, möchte ich einen anderen Weg angeben:
Das ist ein interessanter Ansatz. Nicht wirklich anwendbar, wenn Sie eine große Datei herunterladen müssen und die Geschwindigkeit pro Verbindung begrenzt ist, kann aber beim Herunterladen mehrerer Dateien hilfreich sein.
Nikola Petkanski
Wenn Sie diesen Befehl ausführen, wird die Liste achtmal ausgeführt, nein? Ich habe es auf die gleiche Weise gemacht und anstatt jede Zeile mit 8 Parallelen zu verarbeiten, wird nur die gesamte Liste 8 Mal verarbeitet.
DomainsFeatured
4
Nein, es teilt die Liste auf 8 Jobs
Nikolay Shmyrev
Okay, ich mache definitiv etwas Seltsames. Werde es herausfinden. Danke für die schnelle Antwort.
DomainsFeatured
1
Das ist jedoch eine nutzlose Verwendungcat . In diesem begrenzten Kontext ist es ziemlich harmlos, aber vielleicht möchten Sie dieses Antimuster nicht verüben.
Beim Herunterladen einiger tausend Protokolldateien von einem Server zum nächsten musste ich plötzlich ernsthafte Multithread-Downloads in BSD durchführen, vorzugsweise mit Wget, da dies die einfachste Möglichkeit war, dies zu handhaben. Ein kleiner Blick führte mich zu diesem kleinen Nugget:
Wiederholen wget -r -np -N [url]Sie dies einfach für so viele Threads, wie Sie benötigen ... Nun, da dies nicht schön ist und es sicherlich bessere Möglichkeiten gibt, dies zu tun, aber wenn Sie etwas schnelles und schmutziges wollen, sollte es den Trick tun ...
Hinweis: die Option -Nmacht wgetnur Download „neuere“ Dateien, was bedeutet , es wird nicht überschreiben oder neu Download - Dateien , wenn ihre Zeitstempel Änderungen auf dem Server.
Aber lädt das nicht den gesamten Satz von Artefakten für jeden Prozess herunter?
Kai Mattern
10
@KaiMattern: Fügen Sie die -ncOption "no clobber" hinzu. Dadurch ignoriert wget bereits heruntergeladene (auch teilweise) Dateien.
SF.
1
Ich hatte eine Liste von Bildern, die ich herunterladen musste, und das funktionierte auch für mich: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncSehr hässlich, aber hey, es funktioniert. : P
Jared
1
Wenn eine dieser Verbindungen aus irgendeinem Grund unterbrochen wird, erhalten Sie unvollständige Dateien, ohne von anderen Verbindungen berührt zu werden. Diese Methode führt zu Integritätsproblemen.
Muhammedv
Das -bFlag führt den wget-Prozess im Hintergrund aus, als Alternative zur integrierten &Jobsteuerung von bash . STDOUT wird in wget-log geschrieben, wenn -o <filename>nichts angegeben ist. Gut für Skripte. Siehe wget (1) für weitere Details.
Paul
21
Ein anderes Programm, das dies tun kann, ist axel.
axel -n <NUMBER_OF_CONNECTIONS> URL
Für baisic HTTP Auth,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
Normalerweise tue ich dasaxel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Lord Loh.
Kann ich Axel verwenden, um einen ganzen Ordner rekursiv herunterzuladen?
Ryan Arief
17
Ein neues (aber noch nicht veröffentlichtes) Tool ist Mget . Es verfügt bereits über viele von Wget bekannte Optionen und eine Bibliothek, mit der Sie das Herunterladen einfach (rekursiv) in Ihre eigene Anwendung einbetten können.
Zur Beantwortung Ihrer Frage:
mget --num-threads=4 [url]
AKTUALISIEREN
Mget wurde jetzt als Wget2 entwickelt, mit vielen behobenen Fehlern und mehr Funktionen (z. B. HTTP / 2-Unterstützung).
Gibt es Tipps zur Installation von wget2 auf einem Mac? Site dokumentiert nur, wie man es von der Quelle installiert und Probleme hat, Autopoint zu bekommen
Chris
In unserem TravisCI-Skript verwenden wir Homebrew, um gettext (einschließlich Autopoint) zu installieren. Schauen Sie sich .travis_setup.sh aus dem wget2-Repo an.
Rockdaboot
13
Ich empfehle dringend, httrack zu verwenden.
Ex: httrack -v -w http://example.com/
Standardmäßig wird ein Spiegel mit 8 gleichzeitigen Verbindungen erstellt. Httrack bietet unzählige Möglichkeiten zum Spielen. Guck mal.
@ aaa90210: Es wäre großartig, wenn Sie die Programmmängel kurz und bündig erklärt hätten. Der Kommentar von ArturBodera ist viel informativer.
Richard
@ArturBodera Sie können dem Ordner, in dem Sie Ihr Programm ausführen, die Datei cookies.txt hinzufügen, die diese Cookies automatisch zum Download-Header hinzufügt.
Bertoncelj1
httrack unterstützt keine folgenden Weiterleitungen
Chris Hunt
11
Wie andere Poster bereits erwähnt haben, würde ich vorschlagen, dass Sie sich aria2 ansehen . Von der Ubuntu-Manpage für Version 1.16.1:
aria2 ist ein Dienstprogramm zum Herunterladen von Dateien. Die unterstützten Protokolle sind HTTP (S), FTP, BitTorrent und Metalink. aria2 kann eine Datei von mehreren Quellen / Protokollen herunterladen und versucht, Ihre maximale Download-Bandbreite zu nutzen. Es unterstützt das gleichzeitige Herunterladen einer Datei von HTTP (S) / FTP und BitTorrent, während die von HTTP (S) / FTP heruntergeladenen Daten in den BitTorrent-Schwarm hochgeladen werden. Mit den Chunk-Prüfsummen von Metalink überprüft aria2 automatisch Datenblöcke, während eine Datei wie BitTorrent heruntergeladen wird.
Mit dem -xFlag können Sie die maximale Anzahl von Verbindungen pro Server angeben (Standard: 1):
aria2c -x 16 [url]
Wenn dieselbe Datei an mehreren Speicherorten verfügbar ist, können Sie sie von allen herunterladen. Verwenden Sie das -jFlag, um die maximale Anzahl paralleler Downloads für jeden statischen URI anzugeben (Standard: 5).
Sie sagen immer, es kommt darauf an, aber wenn es um das Spiegeln einer Website geht, gibt es den besten httrack . Es ist super schnell und einfach zu arbeiten. Der einzige Nachteil ist das sogenannte Support-Forum, aber Sie können sich anhand der offiziellen Dokumentation zurechtfinden . Es hat sowohl eine GUI- als auch eine CLI-Oberfläche und unterstützt Cookies. Lesen Sie einfach die Dokumente. Dies ist das Beste. (Mit diesem Tool können Sie das gesamte Web auf Ihre Festplatte herunterladen.)
httrack -c8 [url]
Standardmäßig ist die maximale Anzahl gleichzeitiger Verbindungen auf 8 begrenzt, um eine Überlastung des Servers zu vermeiden
Verwenden Sie xargsdiese Option, um wgetmehrere Dateien parallel zu bearbeiten
#!/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
Aria2-Optionen, Der richtige Weg, um mit Dateien zu arbeiten, die kleiner als 20 MB sind
aria2c -k 2M -x 10 -s 10 [url]
-k 2M Datei in 2 MB Block aufteilen
-koder --min-split-sizehat einen Standardwert von 20 MB. Wenn Sie diese Option und Datei nicht unter 20 MB festlegen, wird sie nur in einer einzigen Verbindung ausgeführt, unabhängig vom Wert von -xoder-s
makekann leicht parallelisiert werden (zB make -j 4). Hier ist zum Beispiel eine einfache MakefileMethode, mit der ich Dateien parallel mit wget herunterladen kann:
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)/$@
.PHONY: all
default: all
Erwägen Sie die Verwendung von regulären Ausdrücken oder FTP-Globbing . Auf diese Weise können Sie wget mehrmals mit verschiedenen Gruppen von Dateinamen-Startzeichen starten, abhängig von ihrer Häufigkeit.
So synchronisiere ich beispielsweise einen Ordner zwischen zwei NAS:
Das erste Wget synchronisiert alle Dateien / Ordner beginnend mit 0, 1, 2... F, G, Hund der zweite Thread synchronisiert alles andere.
Dies war der einfachste Weg, um zwischen einem NAS mit einem 10G-Ethernet-Port (10.0.0.100) und einem NAS mit zwei 1G-Ethernet-Ports (10.0.0.10 und 10.0.0.11) zu synchronisieren. Ich habe die beiden Wget-Threads --bind-addressan die verschiedenen Ethernet-Ports gebunden und sie parallel genannt, indem ich sie &am Ende jeder Zeile platziert habe. Dadurch konnte ich riesige Dateien mit insgesamt 2x 100 MB / s = 200 MB / s kopieren.
Antworten:
benutze die aria2:
http://aria2.sourceforge.net
Ich liebe es !!
quelle
-s
, die Anzahl der Teilungen und-k
die Mindestgröße pro Teilungssegment anzugeben. Andernfalls erreichen Sie möglicherweise nie die-x
maximale Anzahl von Verbindungen.Wget unterstützt keine Verbindungen mit mehreren Sockets, um das Herunterladen von Dateien zu beschleunigen.
Ich denke, wir können ein bisschen besser als gmarian antworten.
Der richtige Weg ist zu verwenden
aria2
.quelle
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
und-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
und hat gut für mich funktioniert (ein Server mit einem Limit von 100.000 pro Verbindung lässt mich bei 400.000 mit diesen Parametern herunterladen)aria2
unterstützt keine rekursiven HTTP-Downloads, was es zu einem minderwertigen Ersatz macht,wget
wenn dies-r
gewünscht wird.Da GNU parallel noch nicht erwähnt wurde, möchte ich einen anderen Weg angeben:
quelle
cat
. In diesem begrenzten Kontext ist es ziemlich harmlos, aber vielleicht möchten Sie dieses Antimuster nicht verüben.Ich habe (wahrscheinlich) eine Lösung gefunden
Hinweis: die Option
-N
machtwget
nur Download „neuere“ Dateien, was bedeutet , es wird nicht überschreiben oder neu Download - Dateien , wenn ihre Zeitstempel Änderungen auf dem Server.quelle
-nc
Option "no clobber" hinzu. Dadurch ignoriert wget bereits heruntergeladene (auch teilweise) Dateien.wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
Sehr hässlich, aber hey, es funktioniert. : P-b
Flag führt den wget-Prozess im Hintergrund aus, als Alternative zur integrierten&
Jobsteuerung von bash . STDOUT wird in wget-log geschrieben, wenn-o <filename>
nichts angegeben ist. Gut für Skripte. Siehe wget (1) für weitere Details.Ein anderes Programm, das dies tun kann, ist
axel
.Für baisic HTTP Auth,
Ubuntu Manpage .
quelle
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Ein neues (aber noch nicht veröffentlichtes) Tool ist Mget . Es verfügt bereits über viele von Wget bekannte Optionen und eine Bibliothek, mit der Sie das Herunterladen einfach (rekursiv) in Ihre eigene Anwendung einbetten können.
Zur Beantwortung Ihrer Frage:
mget --num-threads=4 [url]
AKTUALISIEREN
Mget wurde jetzt als Wget2 entwickelt, mit vielen behobenen Fehlern und mehr Funktionen (z. B. HTTP / 2-Unterstützung).
--num-threads
ist jetzt--max-threads
.quelle
Ich empfehle dringend, httrack zu verwenden.
Ex:
httrack -v -w http://example.com/
Standardmäßig wird ein Spiegel mit 8 gleichzeitigen Verbindungen erstellt. Httrack bietet unzählige Möglichkeiten zum Spielen. Guck mal.
quelle
Wie andere Poster bereits erwähnt haben, würde ich vorschlagen, dass Sie sich aria2 ansehen . Von der Ubuntu-Manpage für Version 1.16.1:
Mit dem
-x
Flag können Sie die maximale Anzahl von Verbindungen pro Server angeben (Standard: 1):Wenn dieselbe Datei an mehreren Speicherorten verfügbar ist, können Sie sie von allen herunterladen. Verwenden Sie das
-j
Flag, um die maximale Anzahl paralleler Downloads für jeden statischen URI anzugeben (Standard: 5).Werfen Sie einen Blick auf http://aria2.sourceforge.net/ für weitere Informationen. Für Verwendungsinformationen ist die Manpage sehr beschreibend und enthält unten einen Abschnitt mit Verwendungsbeispielen. Eine Online-Version finden Sie unter http://aria2.sourceforge.net/manual/en/html/README.html .
quelle
wget kann nicht in mehreren Verbindungen heruntergeladen werden, stattdessen können Sie versuchen, ein anderes Programm wie aria2 zu verwenden.
quelle
versuchen Sie es mit pcurl
http://sourceforge.net/projects/pcurl/
verwendet curl anstelle von wget, Downloads in 10 Segmenten parallel.
quelle
verwenden
Geben Sie in website.txt 1 URL pro Zeile ein. Beispiel:
quelle
Sie sagen immer, es kommt darauf an, aber wenn es um das Spiegeln einer Website geht, gibt es den besten httrack . Es ist super schnell und einfach zu arbeiten. Der einzige Nachteil ist das sogenannte Support-Forum, aber Sie können sich anhand der offiziellen Dokumentation zurechtfinden . Es hat sowohl eine GUI- als auch eine CLI-Oberfläche und unterstützt Cookies. Lesen Sie einfach die Dokumente. Dies ist das Beste. (Mit diesem Tool können Sie das gesamte Web auf Ihre Festplatte herunterladen.)
Standardmäßig ist die maximale Anzahl gleichzeitiger Verbindungen auf 8 begrenzt, um eine Überlastung des Servers zu vermeiden
quelle
Verwenden Sie
xargs
diese Option, umwget
mehrere Dateien parallel zu bearbeitenAria2-Optionen, Der richtige Weg, um mit Dateien zu arbeiten, die kleiner als 20 MB sind
-k 2M
Datei in 2 MB Block aufteilen-k
oder--min-split-size
hat einen Standardwert von 20 MB. Wenn Sie diese Option und Datei nicht unter 20 MB festlegen, wird sie nur in einer einzigen Verbindung ausgeführt, unabhängig vom Wert von-x
oder-s
quelle
make
kann leicht parallelisiert werden (zBmake -j 4
). Hier ist zum Beispiel eine einfacheMakefile
Methode, mit der ich Dateien parallel mit wget herunterladen kann:quelle
Erwägen Sie die Verwendung von regulären Ausdrücken oder FTP-Globbing . Auf diese Weise können Sie wget mehrmals mit verschiedenen Gruppen von Dateinamen-Startzeichen starten, abhängig von ihrer Häufigkeit.
So synchronisiere ich beispielsweise einen Ordner zwischen zwei NAS:
Das erste Wget synchronisiert alle Dateien / Ordner beginnend mit
0, 1, 2... F, G, H
und der zweite Thread synchronisiert alles andere.Dies war der einfachste Weg, um zwischen einem NAS mit einem 10G-Ethernet-Port (10.0.0.100) und einem NAS mit zwei 1G-Ethernet-Ports (10.0.0.10 und 10.0.0.11) zu synchronisieren. Ich habe die beiden Wget-Threads
--bind-address
an die verschiedenen Ethernet-Ports gebunden und sie parallel genannt, indem ich sie&
am Ende jeder Zeile platziert habe. Dadurch konnte ich riesige Dateien mit insgesamt 2x 100 MB / s = 200 MB / s kopieren.quelle