J'utilise wget pour télécharger le contenu du site Web, mais wget télécharge les fichiers un par un.
Comment puis-je faire un téléchargement wget en utilisant 4 connexions simultanées?
J'utilise wget pour télécharger le contenu du site Web, mais wget télécharge les fichiers un par un.
Comment puis-je faire un téléchargement wget en utilisant 4 connexions simultanées?
Réponses:
utilisez aria2:
aria2c -x 16 [url]
# |
# |
# |
# ----> the number of connections
J'aime cela !!
-s
de spécifier le nombre de divisions et -k
de spécifier la taille minimale par segment divisé - sinon vous risquez de ne jamais atteindre le nombre -x
maximal de connexions.
Wget ne prend pas en charge plusieurs connexions de socket afin d'accélérer le téléchargement des fichiers.
Je pense que nous pouvons faire un peu mieux que la réponse gmarian.
La bonne façon est d'utiliser aria2
.
aria2c -x 16 -s 16 [url]
# | |
# | |
# | |
# ---------> the number of connections here
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
et-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
et a bien fonctionné pour moi (un serveur avec une limite de 100k par connexion me permet de télécharger à 400k avec lesdits paramètres)
aria2
ne prend pas en charge les téléchargements HTTP récursifs, ce qui en fait un remplacement de qualité inférieure wget
si vous le -r
souhaitez.
Puisque le parallèle GNU n'était pas encore mentionné, permettez-moi de donner une autre façon:
cat url.list | parallel -j 8 wget -O {#}.html {}
cat
, cependant. Dans ce contexte limité, c'est assez inoffensif, mais peut-être que vous ne voulez pas perpétuer cet anti-modèle.
J'ai trouvé (probablement) une solution
Dans le processus de téléchargement de quelques milliers de fichiers journaux d'un serveur à l'autre, j'ai soudainement eu besoin de faire un téléchargement sérieux multithread en BSD, de préférence avec Wget car c'était la façon la plus simple de penser à cela. Un petit coup d'œil m'a conduit à cette petite pépite:
wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url] & wget -r -np -N [url]
Répétez simplement le
wget -r -np -N [url]
pour autant de threads que vous en avez besoin ... Maintenant étant donné que ce n'est pas joli et qu'il y a sûrement de meilleures façons de le faire, mais si vous voulez quelque chose de rapide et de sale, cela devrait faire l'affaire ...
Remarque: l'option -N
permet de wget
télécharger uniquement des fichiers "plus récents", ce qui signifie qu'elle n'écrasera ni ne téléchargera à nouveau les fichiers à moins que leur horodatage ne change sur le serveur.
-nc
option: "no clobber" - cela fait que wget ignore les fichiers déjà téléchargés (même partiellement).
wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
très moche, mais bon, ça marche. : P
-b
indicateur exécutera le processus wget en arrière-plan, comme alternative au &
contrôle de travail intégré de bash . STDOUT sera écrit dans wget-log s'il -o <filename>
n'est pas spécifié. Bon pour les scripts. Voir wget (1) pour plus de détails.
Un autre programme qui peut le faire est axel
.
axel -n <NUMBER_OF_CONNECTIONS> URL
Pour l'authentification HTTP baisic,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Un nouvel outil (mais pas encore publié) est Mget . Il a déjà de nombreuses options connues de Wget et est livré avec une bibliothèque qui vous permet d'intégrer facilement le téléchargement (récursif) dans votre propre application.
Pour répondre à ta question:
mget --num-threads=4 [url]
METTRE À JOUR
Mget est maintenant développé en tant que Wget2 avec de nombreux bugs corrigés et plus de fonctionnalités (par exemple le support HTTP / 2).
--num-threads
est maintenant --max-threads
.
Je suggère fortement d'utiliser httrack.
ex: httrack -v -w http://example.com/
Il fera un miroir avec 8 connexions simultanées par défaut. Httrack a une tonne d'options où jouer. Regarde.
Comme d'autres affiches l'ont mentionné, je vous suggère de jeter un œil à aria2 . Depuis la page de manuel Ubuntu pour la version 1.16.1:
aria2 est un utilitaire de téléchargement de fichiers. Les protocoles pris en charge sont HTTP (S), FTP, BitTorrent et Metalink. aria2 peut télécharger un fichier à partir de plusieurs sources / protocoles et essaie d'utiliser votre bande passante de téléchargement maximale. Il prend en charge le téléchargement d'un fichier depuis HTTP (S) / FTP et BitTorrent en même temps, tandis que les données téléchargées depuis HTTP (S) / FTP sont téléchargées vers l'essaim BitTorrent. À l'aide des sommes de contrôle des morceaux de Metalink, aria2 valide automatiquement des morceaux de données lors du téléchargement d'un fichier comme BitTorrent.
Vous pouvez utiliser l' -x
indicateur pour spécifier le nombre maximal de connexions par serveur (par défaut: 1):
aria2c -x 16 [url]
Si le même fichier est disponible à partir de plusieurs emplacements, vous pouvez choisir de télécharger à partir de chacun d'eux. Utilisez l' -j
indicateur pour spécifier le nombre maximal de téléchargements parallèles pour chaque URI statique (par défaut: 5).
aria2c -j 5 [url] [url2]
Jetez un œil à http://aria2.sourceforge.net/ pour plus d'informations. Pour les informations d'utilisation, la page de manuel est vraiment descriptive et comporte une section en bas avec des exemples d'utilisation. Une version en ligne est disponible sur http://aria2.sourceforge.net/manual/en/html/README.html .
wget ne peut pas télécharger dans plusieurs connexions, à la place, vous pouvez essayer d'utiliser un autre programme comme aria2.
essayez pcurl
http://sourceforge.net/projects/pcurl/
utilise curl au lieu de wget, télécharge en 10 segments en parallèle.
utilisation
aria2c -x 10 -i websites.txt >/dev/null 2>/dev/null &
dans website.txt, mettez 1 URL par ligne, par exemple:
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
Ils disent toujours ça dépend mais quand il s'agit de la mise en miroir d' un site Web La meilleure existe httrack . C'est super rapide et facile à travailler. Le seul inconvénient est ce qu'on appelle le forum de support, mais vous pouvez trouver votre chemin en utilisant la documentation officielle . Il a à la fois une interface graphique et une interface CLI et il prend en charge les cookies, lisez simplement les documents C'est le meilleur. (Soyez prudent avec cet outil, vous pouvez télécharger le Web entier sur votre disque dur)
httrack -c8 [url]
Par défaut, nombre maximum de connexions simultanées limité à 8 pour éviter la surcharge du serveur
utiliser xargs
pour faire wget
travailler plusieurs fichiers en parallèle
#!/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
Options Aria2, la bonne façon de travailler avec un fichier inférieur à 20 Mo
aria2c -k 2M -x 10 -s 10 [url]
-k 2M
diviser le fichier en morceaux de 2 Mo
-k
ou --min-split-size
a une valeur par défaut de 20 Mo, si vous ne définissez pas cette option et si vous déposez un fichier sous 20 Mo, il ne fonctionnera qu'en connexion unique, quelle que soit la valeur de -x
ou-s
make
peut être parallélisé facilement (par exemple, make -j 4
). Par exemple, voici un simple que Makefile
j'utilise pour télécharger des fichiers en parallèle à l'aide de 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)/$@
.PHONY: all
default: all
Envisagez d'utiliser des expressions régulières ou des globes FTP . Par cela, vous pouvez démarrer wget plusieurs fois avec différents groupes de caractères de début de nom de fichier en fonction de leur fréquence d'occurrence.
C'est par exemple comment je synchronise un dossier entre deux NAS:
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.10 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[0-9a-hA-H]*" --directory-prefix=/volume1/foo &
wget --recursive --level 0 --no-host-directories --cut-dirs=2 --no-verbose --timestamping --backups=0 --bind-address=10.0.0.11 --user=<ftp_user> --password=<ftp_password> "ftp://10.0.0.100/foo/bar/[!0-9a-hA-H]*" --directory-prefix=/volume1/foo &
Le premier wget synchronise tous les fichiers / dossiers commençant par 0, 1, 2... F, G, H
et le deuxième thread synchronise tout le reste.
C'était le moyen le plus simple de synchroniser un NAS avec un port Ethernet 10G (10.0.0.100) et un NAS avec deux ports Ethernet 1G (10.0.0.10 et 10.0.0.11). J'ai lié les deux threads wget --bind-address
aux différents ports Ethernet et les ai appelés parallèles en les mettant &
à la fin de chaque ligne. Par cela, j'ai pu copier des fichiers énormes avec 2x 100 Mo / s = 200 Mo / s au total.