Baixe um número arbitrário de arquivos usando wget de um diretório de auto-redirecionamento

Baixe um número arbitrário de arquivos usando wget de um diretório de auto-redirecionamento

Preciso baixar um grande número de arquivos PDF (seria entediante, senão impossível, coletar e agrupar todos os links) do site da minha universidade usando o wget, com links como este:

http://example.edu/path_to_directory/directory/foobar.pdf

Estou usando o seguinte comando:

wget -mk --no-check-certificate --load-cookies cookies.txt  http://example.edu/arbitrary_link_to_directory/directory/

Infelizmente, os diretórios reais que contêm os PDFs redirecionam para uma página de erro, e tudo que recebo são um monte de arquivos HTML e CSS.

http://example.edu/path_to_directory/directory/

em um navegador redirecionaria alguém para

http://example.edu/path_to_directory/error/error.html

Seria possível baixar todos os arquivos em questão usando o wget?

Responder1

Quando quero baixar vários arquivos de um site que não facilita (ou dificulta ativamente), eu gero uma lista de URLs dos arquivos com algo assim:

lynx -dump -listonly $URL | awk '/\.pdf/ {print $2}' > /tmp/pdflist.txt

Normalmente, edito o arquivo para viexcluir entradas que não quero baixar e, finalmente, busco todas elas com o wget:

wget --input-file=/tmp/pdflist.txt

Isso funciona bem para tarefas simples e geralmente funciona bem o suficiente para tarefas moderadamente difíceis... mas para tarefas difíceis que envolvem análise de HTML complicado e links a seguir (e talvez usando cookies), escreverei um perlweb-bot usando o libwww-perlmódulo ( também conhecido comoLWP).

Responder2

No site da sua universidade há uma página com links para todos os PDFs? Ou como você conhece a lista de nomes de arquivos PDF?

Nesse caso, você precisará escrever um script chamado scraper para obter links dessa página de maneira programática e, em seguida, percorrer automaticamente essa lista e baixá-los com o wget ou outra ferramenta. Eu sugeriria PHP ou Python para escrever o raspador. Você gerenciará facilmente a eventual paginação no site de origem. Se estiver usando PHP, você pode simplesmente baixar arquivos com

file_put_contents('destination_filename', file_get_contents('source_url');

informação relacionada