CURL para baixar um diretório


38

Estou tentando baixar um diretório de site completo usando CURL. O seguinte comando não funciona:

curl -LO http://example.com/

Ele retorna um erro: curl: Remote file name has no length!.

Mas quando faço isso: curl -LO http://example.com/someFile.typefunciona. Alguma idéia de como baixar todos os arquivos no diretório especificado? Obrigado.

Respostas:


33

Sempre funciona para mim, sem pais e recursivo para obter apenas o diretório desejado.

 wget --no-parent -r http://WEBSITE.com/DIRECTORY

11
Essa deve ser a resposta aceita.
Juan Jimenez

Tentando baixar uma pasta do git. Eu tentei wget --no-parent -r http://WEBSITE.com/DIRECTORYe também sem --no-parent- não funcionou.
Sam-T

32

HTTP realmente não tem uma noção de diretórios. As barras que não sejam as três primeiras ( http://example.com/) não têm nenhum significado especial, exceto ..em URLs relativos. Portanto, a menos que o servidor siga um formato específico, não há como “baixar todos os arquivos no diretório especificado”.

Se você deseja baixar o site inteiro, sua melhor aposta é percorrer recursivamente todos os links da página principal. Curl não pode fazer isso, mas o wget pode. Isso funcionará se o site não for muito dinâmico (em particular, o wget não verá links criados pelo código Javascript). Comece com wget -r http://example.com/e procure em “Opções de recuperação recursiva” e “Opções de aceitação / rejeição recursiva” no manual do wget para obter opções mais relevantes (profundidade da recursão, listas de exclusão, etc.).

Se o site tentar bloquear downloads automatizados, talvez seja necessário alterar a string do agente do usuário ( -U Mozilla) e ignorar robots.txt(crie um arquivo vazio example.com/robots.txte use a -ncopção para que o wget não tente baixá-lo do servidor).


Como o wget é capaz de fazê-lo. ??
Srikan

O @Srikan wget analisa o HTML para encontrar os links que ele contém e baixa recursivamente (uma seleção) desses links.
Gilles 'SO- stop be evil'

Se os arquivos não tiverem links internos, o download recursivo falhará ao obter todos os arquivos. Vamos dizer que há uma pasta HTTP de alguns arquivos txt. O wget conseguirá obter todos os arquivos. Deixe-me tentar depois deste comentário #
Srikan 15/10

O @Srikan HTTP não tem conceito de diretório. Download recursivo significa seguir links em páginas da web (incluindo páginas da web geradas pelo servidor para mostrar uma lista de diretórios, se o servidor fizer isso ).
Gilles 'SO- stop be evil'

O wget suporta ignorar robots.txt com a bandeira -e robots=off. Como alternativa, você pode evitar o download rejeitando-o com -R "robots.txt".
Ryan Krage

17

Nesse caso, curlNÃO é a melhor ferramenta. Você pode usar wgetcom o -rargumento, assim:

wget -r http://example.com/ 

Essa é a forma mais básica e você também pode usar argumentos adicionais. Para mais informações, consulte o manpage( man wget).


5

Isso não é possível. Não existe uma maneira padrão, geralmente implementada, para um servidor da Web retornar o conteúdo de um diretório para você. A maioria dos servidores gera um índice HTML de um diretório, se configurado para isso, mas essa saída não é padrão nem garantida por nenhum meio. Você pode analisar esse HTML, mas lembre-se de que o formato será alterado de servidor para servidor e nem sempre será ativado.


Veja este aplicativo chamado Site Sucker. sitesucker.us . Como eles fazem isso?
Foo

Eles analisam o arquivo HTML e baixam todos os links nele.
Brad

Usando wgetou curl?
Foo

7
@ Brad: curl não analisa o HTML, mas o wget faz exatamente isso (é chamado de recuperação recursiva).
Gilles 'SO- stop be evil'

11
Ah, bem, eu estou corrigido! gnu.org/software/wget/manual/html_node/… O OP deve estar ciente de que isso ainda não consegue o que ele está procurando ... segue apenas links disponíveis nas páginas retornadas.
Brad

2

Você pode usar a extensão do Firefox DownThemAll! Ele permitirá que você baixe todos os arquivos em um diretório em um clique. Também é personalizável e você pode especificar quais tipos de arquivo baixar. Esta é a maneira mais fácil que encontrei.


0

Você pode encontrar um uso para um ripador de sites aqui, isso fará o download de tudo e modificará o conteúdo / links internos para uso local. Um bom pode ser encontrado aqui: http://www.httrack.com

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.