maneira rápida de baixar muitas pequenas páginas da web?

2

Eu preciso baixar muitas páginas pequenas o mais rápido possível. O tamanho médio de uma página é de 3kb. Existem milhões de páginas. Primeiro, tentei curl , mas foi muito lento, provavelmente porque estava aguardando o servidor responder a uma solicitação e, em seguida, executar o mesmo processo para a próxima página.

curl -O "http://website.com/pages/[0000001-1000000].html"

Editar: depois de fazer alguns testes, observei esses resultados. Estou sempre aberto a mais sugestões. Eu gostaria de melhorar ainda mais a velocidade.

Comparação 1: (dns vs. não dns)

mais lento:

curl -O "http://website.com/pages/[1-1000].html" -s -S

mais rápido:

curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S

Ao baixar muitas páginas pequenas, os atrasos do DNS são críticos.

Comparação 2: (usando seqüência de onda vs. "seq")

mais lento:

curl -O "http://90.111.123.222/pages/{1}.html" -s -S ::: $(seq 1 1000)

mais rápido:

curl -O "http://90.111.123.222/pages/[1-1000].html" -s -S

Comparação 3: (execução paralela)

mais lento:

time parallel -j 5 curl -O \'"http://90.111.123.222/pages/{1}.html"\'
-S -s ::: $(seq 1 1000)

mais rápido:

( time curl -O "http://90.111.123.222/pages/[1-200].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[201-400].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[401-600].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[601-800].html" -s -S &
  time curl -O "http://90.111.123.222/pages/[801-1000].html" -s -S & )

Btw, obviamente, a execução de mais instâncias aumentará a velocidade de ambos os métodos em algum momento.

    
por dandidondi 06.07.2015 / 21:41

2 respostas

2

Você agiliza isso colocando sua operação em várias operações menores. Por exemplo, você pode criar 10 processos de curl e aplicá-los em segundo plano:

curl -O "http://website.com/pages/0[000000-999999].html" &
curl -O "http://website.com/pages/1[000000-999999].html" &
curl -O "http://website.com/pages/2[000000-999999].html" &
...

e assim por diante.

No entanto, a solução mais inteligente e mais flexível pode querer usar o paralelo GNU para que vários arquivos possam ser baixados em paralelo , com o manuseio paralelo da distribuição de tarefas.

instale-o com o seu gerenciador de pacotes de sua escolha, então seria algo simplesmente como

parallel -j 10 curl -O "http://website.com/pages/{1}" ::: $(seq -w 1000000)

que é muito mais elegante

    
por 06.07.2015 / 22:26
1

Faça o download e aprenda a usar o GNU Parallel
link

Com comandos de linha única, você executará coisas em paralelo muito em breve, não apenas downloads de páginas da Web.

    
por 06.07.2015 / 22:13