Existe um wget paralelo? Algo como fping, mas apenas para baixar?

12

Encontrei apenas puf (buscador de URL paralela), mas não consegui ler URLs de um arquivo; algo como

 puf < urls.txt

também não funciona.

O sistema operacional instalado no servidor é o Ubuntu.

    
por Moonwalker 07.04.2012 / 18:18

7 respostas

1

Você pode implementar isso usando Python e a biblioteca pycurl. A biblioteca pycurl possui a interface "multi" que implementa seu próprio loop que permite múltiplas conexões simultâneas.

No entanto, a interface é mais semelhante a C e, portanto, um pouco incômoda em comparação com outro código mais "Pythonic".

Eu escrevi um wrapper para ele que cria um cliente semelhante a um navegador mais completo em cima dele. Você pode usar isso como um exemplo. Veja o módulo pycopia.WWW.client . O HTTPConnectionManager envolve a interface múltipla.

    
por 10.04.2012 / 05:21
22

Usando Paralelo GNU ,

$ parallel -j ${jobs} wget < urls.txt

ou xargs de GNU Findutils ,

$ xargs -n 1 -P ${jobs} wget < urls.txt

em que ${jobs} é o número máximo de wget que você deseja permitir a execução simultânea (configurando -n para 1 para obter uma wget invocação por linha em urls.txt ). Sem -j / -P , parallel executará tantos trabalhos por vez quanto os núcleos de CPU (o que não faz necessariamente sentido para wget vinculado por rede IO) e xargs executará um em um tempo.

Um bom recurso que parallel tem sobre xargs é manter a saída dos trabalhos em execução simultânea separados, mas se você não se importar com isso, xargs tem mais chances de ser pré-instalado. / p>     

por 07.04.2012 / 19:11
4

aria2 faz isso.

link

Exemplo:     aria2c link

    
por 10.04.2012 / 19:34
1

Isso funciona e não DoS local ou remoto, com ajustes adequados:

(bandwidth=5000 jobs=8; \
 parallel      \
   --round     \
   -P $jobs    \
   --nice +5   \
   --delay 2   \
   --pipepart  \
   --cat       \
   -a urls.txt \
     wget                                \
       --limit-rate=$((bandwidth/jobs))k \
       -w 1                              \
       -nv                               \
       -i {}                             \
)
    
por 18.09.2017 / 11:10
1

Parte da página man do GNU Parallel contém um exemplo de wget recursivo paralelo.

link

O HTML é baixado duas vezes: uma vez para extrair links e uma vez para fazer o download para o disco. Outro conteúdo só é baixado uma vez.

Se você não precisa da resposta do efêmero recursivo, parece óbvio.

    
por 07.04.2012 / 22:32
0

As vítimas do seu download paralell não se divertem: elas esperam que uma conexão atenda cada cliente, configurando várias conexões significa menos clientes em geral. (Isto é, isto é considerado um comportamento rude).

    
por 16.01.2013 / 01:47
-1

Uma solução seria algo como o seguinte:

#!/bin/sh
while IFS= read -r uri; do
    wget -q -- "${uri}" &
done

Em seguida, execute-o como ./puf < urls.txt .

    
por 07.04.2012 / 18:43