|
Shell Script para baixar fotos de um site???
1. Introdução
2. Entendendo a lógica 'básica' e criando um script
3. Arrumando Problema e melhorando o script
4. Faça o script detectar o numero total de fotos sozinho
ATENÇÃO! Esse texto serve apenas como "guia" de como programar em Shell Script. Não devo ser responsabilizado pelo mau uso do script!
1.Introdução
Um dos modos mais simples de baixar um site é usar programas que copiam TOTALMENTE o site. ( O wget tem a opção de fazer isso. )
A desvantagem de fazer isso é que você praticamente irá baixar muita coisa inútil e que pode ser evitada!
Outro modo é criar um shell script para fazer o serviço para você.
As vantagems de usar um shell script:
1. você pode "limitar" o que vai ser baixado
2. Pode fazer o próprio script "organizar" os arquivos para você
3. Caso for baixar arquivos compactados, pode mandar o script já descompactar os arquivos automaticamente.
2. Entendendo a lógica 'básica' e criando um script
Vamos imaginar que você quer baixar "wallpapers". Bons sites, geralmente, mantém os arquivos organizados de uma forma lógica.
Essa lógica é simples, cada "arquivo" recebe um nome composto por uma palavra fixa e um número variável!
Parece assustador falando assim, mas é simples. Se vamos baixar wallpapers geralmente eles tem o nome "fixo" com o nome da categoria e o
número começa do número 1. Então os "wallpapers" da seção carros seria:
carro1.jpg
carro2.jpg
carro3.jpg
carro4.jpg
...
Então fazer um script para baixar todos "wallpapers" da seção carros é simples.
Primeiro temos que ver onde estão salvos os "wallpapers", então abra um dos wallpapers no navegador aperte com o botão direito nele e clique
em "propriedades da imagem" ( pode haver uma pequena alteração no nome do menu de navegador para navegador )
Ele irá mostrar o endereço da imagem. Vamos imaginar que ele mostrou o seguinte endereço:
http://www.wallpapersBLABLABLA.com/carro/carro1.jpg
Então basta fazer um shell script com um "FOR" para copiar todos arquivos de carro, como o exemplo:
for ((i=INICIO;i<=FIM;i++))
do
wget http://www.wallpapersBLABLABLA.com/carro/carro$i.jpg
done
|
onde:
INICIO -> é de onde ele irá começar a baixar os arquivos ( se você baixou carro1.jpg até carro20.jpg, pode alterar inicio para 21 )
FIM -> é até onde irá baixar os arquivos ( se o ultimo wallpaper for carro90.jpg, altere FIM para 90 )
Como funcionar o script?
1. Você dá um valor inicial para variável "i" ( você dá esse valor trocando a palavra "INICIO" pelo valor adequado )
2. O script executa todos comandos que estão entre "do" e "done".
3. Depois de executar os comandos que estão entre "do" e "done", o script soma "1" ao valor atual de "i" ( se "i" fosse "10", fica sendo "11"
)
4. O script verifica se o "i" é menor ou igual que o valor colocado em "FIM"
Se o valor FOR MENOR OU IGUAL ao valor em FIM -> O script executa o que está entre "do" e "done"
Se o valer NÃO FOR MENOR OU IGUAL ao valor em FIM -> O comando "for" pára de ser executado!
3. Arrumando Problema e melhorando o script
Alguns sites colocam um "0" em números menor que "10". Então o que antes era:
carro1.jpg
carro2.jpg
...
Nesses sites ficam:
carro01.jpg
carro02.jpg
...
Como arrumar isso?
Simples, basta "verificar" se "i" é menor que "10" se ele for altere a variável para "0" + i
if [ $i -lt 10 ]
then
n="0$i"
else
n="$i"
fi
Esse script faz o seguinte:
SE "i" for menor que "10" -> ele dá o valor de "n" para "0" + i ( ou seja: se "i" for 5, "n" fica sendo "05" )
SE "i" não for menor que "10" -> "n" fica sendo igual a "i" ( ou seja: se "i" igual a 90, "n" fica sendo "90" )
O script inteiro ficará:
for ((i=INICIO;i<=FIM;i++))
do
if [ $i -lt 10 ]
then
n="0$i"
else
n="$i"
fi
wget http://www.wallpapersBLABLABLA.com/carro/carro$n.jpg
done
|
4. Faça o script detectar o numero total de fotos sozinho
Como fazer um script detectar por sí só quantas fotos tem numa seção de um site?
Uma das idéias é fazer ele baixar todas fotos em sequencia, e cada vez que baixar uma foto verificar se deu erro na hora de baixar, ou não!
Se deu erro é porque todas as fotos da sequencia já foram baixadas!
( algumas vezes pode ser que deu erro porque o servidor não fez a comunicação com seu computador )
Então vamos fazer um script para baixar todas as fotos sem agente precisar saber o numero total de fotos!
for ((i=1;i<=500;i++))
do
if [ $i -lt 10 ]
then
n="0$i"
else
n="$i"
fi
wget http://www.wallpapersBLABLABLA.com/carro/carro$n.jpg
if ! [ -s "carro$n.jpg" ]
then
sudo rm -f carro$n.jpg
exit 0
fi
done
|
Repare que em "for" coloquei "i<=500" coloquei esse valor porque achei impossível um site ter 500 fotos!
Para que serve o 'if ! [ -s "carro$n.jpg" ]' esse comando verifica se o arquivo existe. Se o arquivo não existe, quer dizer que ele não existe para ser baixado. Logo todas as fotos já foram baixadas!
Então é dado o "exit 0" para finalizar o arquivo!
|