Ich verwende wget zum Herunterladen von Website-Inhalten, lädt aber die Dateien einzeln herunter.
Wie kann ich mit 4 gleichzeitigen Verbindungen einen Wget-Download durchführen?
benutze die aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
Ich liebe es !!
Wget unterstützt nicht mehrere Socket-Verbindungen, um das Herunterladen von Dateien zu beschleunigen.
Ich denke, wir können ein bisschen besser als gmarianische Antwort.
Der richtige Weg ist die Verwendung von aria2
.
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
Da GNU parallel noch nicht erwähnt wurde, möchte ich einen anderen Weg geben:
cat url.list | parallel -j 8 wget -O {#}.html {}
Ich habe (wahrscheinlich) eine Lösung gefunden
Beim Herunterladen einiger tausend Protokolldateien von einem Server zum nächsten hatte ich plötzlich die Notwendigkeit, ernsthafte Multithreading-Operationen durchzuführen Download in BSD, vorzugsweise mit Wget, da dies der einfachste Weg war Ich könnte daran denken, damit umzugehen. Ein wenig Umschauen führte mich zu dieses kleine Nugget:
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
Wiederholen Sie einfach den
wget -r -np -N [url]
für so viele Threads, wie Sie benötigen ... Nun, das ist nicht schön und es gibt sicherlich bessere Wege. aber wenn du etwas schnell und schmutzig willst, sollte es den Trick tun ...
Hinweis: Die Option -N
bewirkt, dass wget
nur "neuere" Dateien herunterlädt. Dies bedeutet, dass Dateien nur dann überschrieben oder erneut heruntergeladen werden, wenn sich ihr Zeitstempel auf dem Server ändert.
Ein neues (aber noch nicht veröffentlichtes) Tool ist Mget . Es hat bereits viele von Wget bekannte Optionen und eine Bibliothek, mit der Sie problemlos (rekursives) Herunterladen in Ihre eigene Anwendung integrieren können.
Zur Beantwortung Ihrer Frage:
mget --num-threads=4 [url]
UPDATE
Mget wurde jetzt als Wget2 entwickelt, wobei viele Fehler und weitere Funktionen (z. B. HTTP/2-Unterstützung) behoben wurden.
--num-threads
ist jetzt --max-threads
.
Ich empfehle dringend, httrack zu verwenden.
zB: httrack -v -w http://example.com/
Standardmäßig wird eine Spiegelung mit 8 gleichzeitigen Verbindungen ausgeführt. Httrack hat unzählige Möglichkeiten, um zu spielen. Guck mal.
Wie andere Poster bereits erwähnt haben, schlage ich vor, dass Sie sich aria2 ansehen. Auf 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 aus mehreren Quellen/Protokollen herunterladen und versucht, die 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. Unter Verwendung der Chunk-Prüfsummen von Metalink überprüft aria2 automatisch Datenblöcke, während eine Datei wie BitTorrent heruntergeladen wird.
Sie können das Flag -x
verwenden, um die maximale Anzahl von Verbindungen pro Server anzugeben (Standard: 1):
aria2c -x 16 [url]
Wenn dieselbe Datei an mehreren Orten verfügbar ist, können Sie von allen Dateien herunterladen. Verwenden Sie das Flag -j
, um die maximale Anzahl paralleler Downloads für jeden statischen URI anzugeben (Standard: 5).
aria2c -j 5 [url] [url2]
Weitere Informationen finden Sie unter http://aria2.sourceforge.net/ . Für Informationen zur Verwendung ist die Manpage wirklich beschreibend und enthält einen Abschnitt mit Verwendungsbeispielen. Eine Online-Version finden Sie unter http://aria2.sourceforge.net/manual/de/html/README.html .
wget kann nicht in mehreren Verbindungen heruntergeladen werden, stattdessen können Sie andere Programme wie aria2 verwenden.
versuchen Sie es mit pcurl
http://sourceforge.net/projects/pcurl/
verwendet curl anstelle von wget, Downloads in 10 Segmenten parallel.
make
kann leicht parallelisiert werden (z. B. make -j 4
). Zum Beispiel hier ein einfaches Makefile
, das ich verwende, um Dateien mit wget parallel herunterzuladen:
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
Sie sagen immer, es kommt darauf an, aber wenn es darum geht, eine Website zu spiegeln, existiert das Beste httrack . Es ist super schnell und einfach zu arbeiten. Der einzige Nachteil ist das sogenannte Support-Forum. Sie können sich jedoch mithilfe von offizielle Dokumentation orientieren. Es verfügt sowohl über eine grafische Benutzeroberfläche als auch über eine CLI-Schnittstelle und unterstützt Cookies, lesen Sie einfach die Dokumente. Dies ist die beste Methode.
httrack -c8 [url]
Standardmäßig maximale Anzahl gleichzeitiger Verbindungen begrenzt auf 8, um Serverüberlastung zu vermeiden
verwenden Sie xargs
, um wget
in mehreren Dateien parallel arbeiten zu lassen
#!/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 mit Dateien, die kleiner als 20 MB sind
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
teilt die Datei in einen 2-MB-Block auf
-k
oder --min-split-size
hat einen Standardwert von 20 MB. Wenn Sie diese Option und die Datei nicht unter 20 MB setzen, wird sie nur in einer einzelnen Verbindung ausgeführt, unabhängig von dem Wert von -x
oder -s
.
benutzen
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
geben Sie in websites.txt 1 URL pro Zeile ein. Beispiel:
https://www.example.com/1.mp4
https://www.example.com/2.mp4
https://www.example.com/3.mp4
https://www.example.com/4.mp4
https://www.example.com/5.mp4