Não vejo como isso ajuda a baixar um site - parece que ele baixa apenas 1 arquivo. Se isso for verdade - os votos devem ser -ve.
Stephen
8
Eu concordo, essa não é uma boa resposta, porque aria2 não pode fazer espelhamento de web ou ftp como wget ou lftp. O lftp faz espelhamento e também suporta múltiplas conexões.
anachronist
9
Não se esqueça -sde especificar o número de divisões e -ko tamanho mínimo por segmento dividido; caso contrário, você nunca poderá alcançar o número -xmáximo de conexões.
Bob
2
@ Stephen: é para baixar arquivos muito grandes muito mais rapidamente dos sites, usando vários soquetes no servidor em vez de um. Isso não significa raspar um site.
gabeio
não suporta meias *
Fedcomp 16/05
111
O Wget não suporta várias conexões de soquete para acelerar o download de arquivos.
Acho que podemos fazer um pouco melhor do que a resposta gmariana.
Para documentar -x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1e-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
Obrigado por elaborar os parâmetros, Nick.
Thomas.han 07/04
4
A opção -s sozinha não divide mais um arquivo de um único servidor desde a versão 1.10. É necessário usar --max-connection-per-server juntos para forçar o estabelecimento de várias conexões. Veja a documentação do 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
A abreviação de @ atualização do SamuelLi é aria2c -x 4 -k 1M urle funcionou bem para mim (um servidor com um limite de 100k por conexão deixe-me baixar a 400k com referidos parâmetros)
EkriirkE
Criticamente, aria2se não oferecer downloads de HTTP recursiva, tornando-se um substituto inferior para wgetse -ré desejado.
user2943160 9/01
55
Como o paralelo GNU ainda não foi mencionado, deixe-me dar outra maneira:
Essa é uma abordagem interessante. Não é realmente aplicável quando você precisa fazer o download de um arquivo enorme e obtém velocidade limitada por conexão, mas pode ser útil ao baixar vários arquivos.
Nikola Petkanski
A execução desse comando executaria a lista 8 vezes, não? Fiz da mesma maneira e, em vez de processar cada linha com 8 paralelos, apenas processa a lista inteira 8 vezes.
DomainsFeatured
4
Não, divide a lista em 8 trabalhos #
Nikolay Shmyrev 18/09
Ok, eu definitivamente estou fazendo algo estranho. Vai descobrir isso. Obrigado pela resposta rápida.
DomainsFeatured
1
Esse é um uso inútilcat , no entanto. Nesse contexto limitado, é bastante inofensivo, mas talvez você não queira perpetrar esse antipadrão.
No processo de download de alguns milhares de arquivos de log de um servidor para o outro, repentinamente tive a necessidade de fazer alguns downloads multithread sérios no BSD, de preferência com o Wget, pois era a maneira mais simples de pensar em lidar com isso. Um pouco olhando ao redor me levou a esta pequena pepita:
Apenas repita o procedimento wget -r -np -N [url]para quantos threads você precisar ... Agora, dado que isso não é bonito, e certamente existem maneiras melhores de fazer isso, mas se você quiser algo rápido e sujo, deve fazer o truque ...
Nota: a opção -Ntorna o wgetdownload apenas dos arquivos "mais recentes", o que significa que não sobrescreverá nem fará o download novamente dos arquivos, a menos que o carimbo de data e hora seja alterado no servidor.
Mas isso não faz o download de todo o conjunto de artefatos para cada processo?
Kai Mattern
10
@KaiMattern: adicione a -ncopção: "no clobber" - faz com que o wget ignore os arquivos baixados (mesmo parcialmente).
SF.
1
Eu tinha uma lista de imagens que precisava baixar e isso funcionou para mim também: wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -ncMuito feio, mas ei, funciona. : P
Jared
1
A interrupção de uma dessas conexões por algum motivo fornece arquivos incompletos, sem serem afetados por outras conexões. Este método cria problemas de integridade.
22317 muhammedv
O -bsinalizador executará o processo wget em segundo plano, como uma alternativa ao &controle de tarefas do bash embutido. STDOUT será gravado no wget-log se -o <filename>não for especificado. Bom para scripts. Veja wget (1) para mais detalhes.
Paul
21
Outro programa que pode fazer isso é axel.
axel -n <NUMBER_OF_CONNECTIONS> URL
Para autenticação HTTP básica,
axel -n <NUMBER_OF_CONNECTIONS> "user:password@https://domain.tld/path/file.ext"
Eu costumo fazeraxel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Lorde Loh.
posso usar o axel para baixar recursivamente uma pasta inteira?
Ryan Arief 20/01
17
Uma nova ferramenta (mas ainda não lançada) é o Mget . Ele já possui muitas opções conhecidas do Wget e vem com uma biblioteca que permite incorporar facilmente o download (recursivo) em seu próprio aplicativo.
Para responder sua pergunta:
mget --num-threads=4 [url]
ATUALIZAR
O Mget agora é desenvolvido como Wget2 com muitos bugs corrigidos e mais recursos (por exemplo, suporte a HTTP / 2).
alguma dica sobre como instalar o wget2 em um mac? Site apenas documentos como instalá-lo a partir da fonte e tendo problemas para obter autopoint
Chris
No script do TravisCI, usamos o homebrew para instalar o gettext (que inclui o ponto automático). Dê uma olhada em .travis_setup.sh no repositório wget2.
rockdaboot
13
Eu sugiro fortemente o uso do httrack.
ex: httrack -v -w http://example.com/
Ele fará um espelho com 8 conexões simultâneas como padrão. O Httrack tem inúmeras opções de onde jogar. Dar uma olhada.
@ aaa90210: Seria ótimo se você tivesse explicado sucintamente as deficiências do programa. O comentário de ArturBodera é muito mais informativo.
Richard
@ArturBodera Você pode adicionar o arquivo cookies.txt à pasta da qual você está executando seu programa e ele adicionará automaticamente esses cookies ao cabeçalho do download.
precisa saber é o seguinte
O httrack não suporta os seguintes redirecionamentos
Chris Hunt
11
Como outros pôsteres mencionaram, sugiro que você dê uma olhada no aria2 . Na página de manual do Ubuntu para a versão 1.16.1:
aria2 é um utilitário para baixar arquivos. Os protocolos suportados são HTTP (S), FTP, BitTorrent e Metalink. O aria2 pode baixar um arquivo de várias fontes / protocolos e tenta utilizar sua largura de banda máxima de download. Ele suporta o download de um arquivo de HTTP (S) / FTP e BitTorrent ao mesmo tempo, enquanto os dados baixados de HTTP (S) / FTP são carregados no enxame BitTorrent. Usando as somas de verificação de blocos do Metalink, o aria2 valida automaticamente blocos de dados ao baixar um arquivo como o BitTorrent.
Você pode usar o -xsinalizador para especificar o número máximo de conexões por servidor (padrão: 1):
aria2c -x 16 [url]
Se o mesmo arquivo estiver disponível em vários locais, você poderá fazer o download de todos eles. Use o -jsinalizador para especificar o número máximo de downloads paralelos para cada URI estático (padrão: 5).
Eles sempre dizem que depende, mas quando se trata de espelhar um site, existe o melhor httrack . É super rápido e fácil de trabalhar. A única desvantagem é o chamado fórum de suporte, mas você pode encontrar o seu caminho usando a documentação oficial . Possui interface GUI e CLI e suporta cookies, basta ler os documentos. Este é o melhor (seja cuidadoso com esta ferramenta, você pode baixar a Web inteira no seu disco rígido)
httrack -c8 [url]
Por padrão, número máximo de conexões simultâneas limitadas a 8 para evitar sobrecarga do servidor
use xargspara tornar o wgettrabalho em vários arquivos em paralelo
#!/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
Opções Aria2, o caminho certo para trabalhar com arquivos menores que 20mb
aria2c -k 2M -x 10 -s 10 [url]
-k 2M arquivo dividido em 2mb
-kou --min-split-sizetem o valor padrão de 20mb, se você não definir esta opção e arquivar abaixo de 20mb, ela será executada apenas em uma conexão única, independentemente do valor -xou-s
makepode ser paralelizado facilmente (por exemplo, make -j 4). Por exemplo, aqui está um exemplo Makefileque estou usando para baixar arquivos em paralelo usando o 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
Considere usar expressões regulares ou globbing de FTP . Com isso, você pode iniciar o wget várias vezes com diferentes grupos de caracteres iniciais de nome de arquivo, dependendo da frequência de ocorrência.
É por exemplo, como sincronizo uma pasta entre dois NAS:
O primeiro wget sincroniza todos os arquivos / pastas iniciados com 0, 1, 2... F, G, He o segundo thread sincroniza todo o resto.
Essa foi a maneira mais fácil de sincronizar entre um NAS com uma porta Ethernet 10G (10.0.0.100) e um NAS com duas portas Ethernet 1G (10.0.0.10 e 10.0.0.11). Liguei os dois threads do wget --bind-addressàs diferentes portas Ethernet e os chamei de paralelos, colocando &no final de cada linha. Com isso, eu era capaz de copiar arquivos enormes com 2x 100 MB / s = 200 MB / s no total.
Respostas:
use o aria2:
http://aria2.sourceforge.net
Eu amo isso !!
fonte
-s
de especificar o número de divisões e-k
o tamanho mínimo por segmento dividido; caso contrário, você nunca poderá alcançar o número-x
máximo de conexões.O Wget não suporta várias conexões de soquete para acelerar o download de arquivos.
Acho que podemos fazer um pouco melhor do que a resposta gmariana.
A maneira correta é usar
aria2
.fonte
-x, --max-connection-per-server=NUM The maximum number of connections to one server for each download. Possible Values: 1-16 Default: 1
e-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
e funcionou bem para mim (um servidor com um limite de 100k por conexão deixe-me baixar a 400k com referidos parâmetros)aria2
se não oferecer downloads de HTTP recursiva, tornando-se um substituto inferior parawget
se-r
é desejado.Como o paralelo GNU ainda não foi mencionado, deixe-me dar outra maneira:
fonte
cat
, no entanto. Nesse contexto limitado, é bastante inofensivo, mas talvez você não queira perpetrar esse antipadrão.Encontrei (provavelmente) uma solução
Nota: a opção
-N
torna owget
download apenas dos arquivos "mais recentes", o que significa que não sobrescreverá nem fará o download novamente dos arquivos, a menos que o carimbo de data e hora seja alterado no servidor.fonte
-nc
opção: "no clobber" - faz com que o wget ignore os arquivos baixados (mesmo parcialmente).wget -i list.txt -nc & wget -i list.txt -nc & wget -i list.txt -nc
Muito feio, mas ei, funciona. : P-b
sinalizador executará o processo wget em segundo plano, como uma alternativa ao&
controle de tarefas do bash embutido. STDOUT será gravado no wget-log se-o <filename>
não for especificado. Bom para scripts. Veja wget (1) para mais detalhes.Outro programa que pode fazer isso é
axel
.Para autenticação HTTP básica,
Página de manual do Ubuntu .
fonte
axel -n 4 "user:pasword@http://domain.tld/path/file.ext"
Uma nova ferramenta (mas ainda não lançada) é o Mget . Ele já possui muitas opções conhecidas do Wget e vem com uma biblioteca que permite incorporar facilmente o download (recursivo) em seu próprio aplicativo.
Para responder sua pergunta:
mget --num-threads=4 [url]
ATUALIZAR
O Mget agora é desenvolvido como Wget2 com muitos bugs corrigidos e mais recursos (por exemplo, suporte a HTTP / 2).
--num-threads
é agora--max-threads
.fonte
Eu sugiro fortemente o uso do httrack.
ex:
httrack -v -w http://example.com/
Ele fará um espelho com 8 conexões simultâneas como padrão. O Httrack tem inúmeras opções de onde jogar. Dar uma olhada.
fonte
Como outros pôsteres mencionaram, sugiro que você dê uma olhada no aria2 . Na página de manual do Ubuntu para a versão 1.16.1:
Você pode usar o
-x
sinalizador para especificar o número máximo de conexões por servidor (padrão: 1):Se o mesmo arquivo estiver disponível em vários locais, você poderá fazer o download de todos eles. Use o
-j
sinalizador para especificar o número máximo de downloads paralelos para cada URI estático (padrão: 5).Dê uma olhada em http://aria2.sourceforge.net/ para obter mais informações. Para informações de uso, a página de manual é realmente descritiva e possui uma seção na parte inferior com exemplos de uso. Uma versão online pode ser encontrada em http://aria2.sourceforge.net/manual/en/html/README.html .
fonte
O wget não pode baixar em várias conexões; em vez disso, você pode tentar usar outro programa como o aria2.
fonte
tente pcurl
http://sourceforge.net/projects/pcurl/
usa curl em vez de wget, baixa em 10 segmentos em paralelo.
fonte
usar
em websites.txt coloque 1 url por linha, exemplo:
fonte
Eles sempre dizem que depende, mas quando se trata de espelhar um site, existe o melhor httrack . É super rápido e fácil de trabalhar. A única desvantagem é o chamado fórum de suporte, mas você pode encontrar o seu caminho usando a documentação oficial . Possui interface GUI e CLI e suporta cookies, basta ler os documentos. Este é o melhor (seja cuidadoso com esta ferramenta, você pode baixar a Web inteira no seu disco rígido)
Por padrão, número máximo de conexões simultâneas limitadas a 8 para evitar sobrecarga do servidor
fonte
use
xargs
para tornar owget
trabalho em vários arquivos em paraleloOpções Aria2, o caminho certo para trabalhar com arquivos menores que 20mb
-k 2M
arquivo dividido em 2mb-k
ou--min-split-size
tem o valor padrão de 20mb, se você não definir esta opção e arquivar abaixo de 20mb, ela será executada apenas em uma conexão única, independentemente do valor-x
ou-s
fonte
make
pode ser paralelizado facilmente (por exemplo,make -j 4
). Por exemplo, aqui está um exemploMakefile
que estou usando para baixar arquivos em paralelo usando o wget:fonte
Considere usar expressões regulares ou globbing de FTP . Com isso, você pode iniciar o wget várias vezes com diferentes grupos de caracteres iniciais de nome de arquivo, dependendo da frequência de ocorrência.
É por exemplo, como sincronizo uma pasta entre dois NAS:
O primeiro wget sincroniza todos os arquivos / pastas iniciados com
0, 1, 2... F, G, H
e o segundo thread sincroniza todo o resto.Essa foi a maneira mais fácil de sincronizar entre um NAS com uma porta Ethernet 10G (10.0.0.100) e um NAS com duas portas Ethernet 1G (10.0.0.10 e 10.0.0.11). Liguei os dois threads do wget
--bind-address
às diferentes portas Ethernet e os chamei de paralelos, colocando&
no final de cada linha. Com isso, eu era capaz de copiar arquivos enormes com 2x 100 MB / s = 200 MB / s no total.fonte