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.

Foo
fonte

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
Stanzheng
fonte
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).

Gilles 'SO- parar de ser mau'
fonte
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).

marroquino
fonte
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.

Brad
fonte
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.

Asdf
fonte
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

Gaurav Joseph
fonte