Laden Sie mehrere URLs gleichzeitig herunter

7

Mir ist wget -ieine Möglichkeit bekannt, eine Liste von URLs herunterzuladen. Das einzige Problem ist, dass ich jedem unterschiedliche POST-Daten übergeben muss, was für einzelne URLs funktioniert, wget --post-data=jedoch nicht für Listen.

Ich bin offen für jeden CLI-Downloader oder sogar für etwas in JS oder Python. Ich möchte jedoch entweder einen Fortschrittsbalken für jeden Download oder eine Protokolldatei erhalten, die jedes Mal aktualisiert wird, wenn eine dl beendet wird, oder eine andere Methode, um zu wissen, wann eine dl beendet ist.

der Spiegel
quelle
Jede URL hat einen anderen POST oder haben alle den gleichen?
slm
Viele Methoden hier gezeigt: stackoverflow.com/questions/8634109/…
slm

Antworten:

3

Wenn Sie bereits eine Liste mit URLs haben, fügen Sie einfach die POST-Daten zu dieser Liste hinzu. Etwas wie:

www.example.com    postdata1
www.foo.com
www.bar.com       second_post_data

-iLesen Sie dann statt zu verwenden die Datei in einer Bash-Schleife und übergeben Sie die Daten an wget:

while read url post; do wget --post-data="$post" $url; done < list.txt

Verwenden Sie &anstelle von, um sie parallel auszuführen, sodass mehrere Dateien gleichzeitig heruntergeladen werden ;. Vorsicht, dies startet einen separaten wgetProzess für jede URL.

while read url post; do wget --post-data="$post" $url & done < list.txt

Ein Trick, den ich zum Starten dieser Art von Dingen verwende, besteht darin, zu verfolgen, wie viele derzeit ausgeführt werden, und den nächsten nur auszuführen, wenn die Anzahl unter einem Schwellenwert liegt, z. B. 10:

while read url post; do 
 while [[ "$(pgrep -fc wget)" -gt 9 && $c -gt 10 ]]; do sleep 1; done; 
 ((c++));  
 echo "Launching $url ($c)"; 
 wget --post-data="$post" $url >/dev/null 2>&1 && echo "$c finsihed" & 
done < list.txt

Dadurch werden die ersten 10 URLs gestartet. Warten Sie dann, bis eine abgeschlossen ist, und starten Sie die nächste.

terdon
quelle
2

Sie können eine durch CSV getrennte Datei wie in diesem Format definieren (zum Beispiel):

URL1;POSTDATA1
URL2;POSTDATA2
...

und analysieren Sie es mit einem awkBefehl:

awk -F\; '{print "wget -i "$1" --post-data="$2}' your_CSV_file
Slyx
quelle
2

Ich habe dieses Tool noch nicht verwendet, dachte aber, ich würde es hinzufügen, da es genau so klingt, wie Sie es suchen.

du bekommst

Es ist ein GUI-Tool namens uget. Es kann eine Eingabedatei verwenden, die die herunterzuladenden URLs zusammen mit HTTP-POST-Daten aus einer zweiten Datei enthält. Es ist unklar, ob Sie auf diese Weise unterschiedliche POST-Daten pro URL verwenden können oder ob es sich nur um einen einzigen Satz für alle URLs handelt, der jedoch einen genaueren Blick wert sein könnte.

$ uget-gtk --help
...
  -i, --input-file=FILE         add URLs found in FILE.
  --http-post-data=STRING       use the POST method; send STRING as the data.
  --http-post-file=FILE         use the POST method; send contents of FILE
Screenshots

ss # 1

ss # 2

slm
quelle