como posso extrair todos os links .zip de um site?

0

existe uma ferramenta para extrair todos os links .zip de um site e salvá-los no arquivo .txt . Eu estou usando o Linux mint. Eu quero todos os links .zip deste site:

http://all-free-download.com/free-photos/
    
por ali haider 15.06.2017 / 17:15

1 resposta

0

Eu tenho uma solução embora não seja perfeita e exija que você tenha curl e perl instalado, ambos já devem estar no Linux Mint, embora minha solução inclua um módulo Perl que escrevi e que está disponível no CPAN. Novamente cpan deve estar disponível e instalado no Linux Mint, você pode ter que configurá-lo se ainda não o fez.

Para o módulo App :: ExtractLinks , você pode instalá-lo assim:

$ cpan App::ExtractLinks

Contanto que sua configuração do Perl esteja correta e todos os módulos do CPAN estejam visíveis em seu caminho, agora você poderá executar extract-links no seu terminal. Se você fizer isso sem precisar nada, você não verá nada, pois espera apenas um fluxo de HTML, e ele gera um resultado padrão (imprime no seu terminal) qualquer URL que apareça nos atributos href="" ou src="" , então é muito simples, mas combinando-o com algumas coisas no terminal, podemos quase alcançar o que você pediu.

Se você salvar o seguinte script bash em um arquivo e conceder a ele as permissões executáveis chmod 755 ou executá-lo desta forma bash filename :

#!/usr/bin/env bash

while read url
do
    while read id
    do
        curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
    done < <(curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*')
done < <(curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")

Agora, vamos tentar explicá-lo, linha por linha.

Primeiramente, enviamos a saída do seguinte comando para um loop while read .

curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")

Isso obtém o HTML do URL que você forneceu, canaliza o fluxo de saída para extract-links , (o argumento -s para curl significa apenas curl silenciosamente faz isso) que exibe todos os links encontrados na página . Em seguida, pegamos essa lista de links e procuramos apenas os que possuem /download/ , o que o comando grep está fazendo. Esta não é uma solução geral, é claro, eu tive que dar uma olhada no código HTML do site que você forneceu e descobri a lógica de URL deles.

Depois de obtermos apenas links com /download/ , passamos apenas eles para o loop while read , que pega cada um de cada vez e atribui o link a uma variável $url . Em seguida, fazemos uma operação semelhante novamente:

curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*'

Isso executa a mesma coisa que já fizemos, mas sobre esse link em particular, desta vez filtrando qualquer link que tenha _download , e só pegue os números do link. Novamente, estou descobrindo o esquema que eles devem usar para organizar links e downloads.

Deixe-me dizer neste ponto que o motivo disso é que não há links diretos para .zip arquivos em nenhum lugar do site, os .zip downloads começam depois de um redirecionamento HTTP quando você navega para certas páginas. O que me leva à última seção:

curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'

Isso está pegando apenas os números dos links que recuperamos na etapa anterior, os canaliza novamente em um loop while read , atribui cada um como variável $id e novamente usamos curl desta vez com o -I option, que apenas recupera os cabeçalhos (em vez de baixar o arquivo), cada página nesse ponto faz um redirecionamento que aponta para o próprio arquivo zip. Nós executamos a saída de curl por meio de um script perl embutido, que é apenas um regex para obter o cabeçalho Location HTTP, que é aquele que especifica para qual arquivo redirecionar.

Então, tudo que você precisa fazer é:

bash my_script.sh > links.txt

Editar

Uma ressalva é que links repetidos podem aparecer, apenas com base em meus testes com esse site que você mencionou, então tenha isso em mente.

E, obviamente, essa não é uma operação muito eficiente, mas, novamente, ela é automatizada e não há necessariamente nenhuma outra maneira de acessar os dados desejados sem ter algum acesso de administrador ao site.

    
por 15.06.2017 / 18:38