Fala galera!
Vamos falar hoje de uma técnica muito legal que você pode utilizar tanto para uso em um projeto pessoal quanto para uma necessidade específica.
Vou tentar exemplificar: em algum momento você precisou salvar várias imagens de um mesmo site - respeitando os direitos de cópia e uso - e precisou ficar baixando imagem por imagem? Pois bem, o que faremos aqui é uma forma de automatizar esses downloads deixando a tarefa mais rápida e fácil.
Logicamente, o código varia de site para site, então o que compartilharei com vocês é apenas um exemplo simples. Caso tenha interesse em aplicar em algo mais robusto, por favor, compartilhe com a gente :).
Vamos lá! Para fazer esse exemplo para vocês, vou usar um site simples, porém muito conhecido o www.pudim.com.br. Se você não conhece, vale a pena conferir rsrsrs. E também utilizaremos da técnica Web Scraping, onde já falamos em outros posts.
Bom, além de criar a classe que irá receber o código, é muito interessante que você dê uma olhada na estrutura da página, analisando onde estão - em quais tags, classes e ids - das imagens que deseja baixar. Veja como está localizada a imagem que baixaremos:
Nosso código inicial será para encontrar a imagem no site e obter a url/nome do arquivo para que possamos efetuar o download.
//url do site onde está a imagem public static final String SITE = "http://www.pudim.com.br"; //diretório onde a imagem será salva public static final String PATH = "E:\\imagens\\"; public static void main(String[] args) { try{ Document doc = Jsoup.connect(SITE).timeout(0).get(); String img = doc.select("div.image").select("img").attr("src"); //envia o nome da imagem no site ao método downloadImage(img); }catch(Exception ex){ ex.printStackTrace(); } }
Uma atenção especial para o método timeout(), pois é responsável por definir o tempo de conexão e leitura do site. Por padrão - caso seja omitido o método - o tempo máximo é de 3000 milisegundos (3 segundos), se definir o timeout com 0, ele será tratado como timeout infinito. Quando o tempo limite for excedido, será lançada uma exceção IOException.
//definido timeout 0 Document doc = Jsoup.connect(SITE).timeout(0).get();
Temos um método chamado downloadImage(String img) que será responsável por baixar a imagem e salvar no diretório de destino.
private static void downloadImage(String img) throws IOException{ //nome do arquivo que será salvo no pc //nesse caso, adiciona a extensão String nome = "imagem.jpg"; // url = http://www.pudim.com.br/pudim.jpg URL url = new URL(SITE+"/"+img); InputStream input = url.openStream(); OutputStream output = new BufferedOutputStream(new FileOutputStream(PATH + nome)); for(int i; (i = input.read()) != -1;){ output.write(i); } //encerra as conexões output.close(); input.close(); }
Após o download, a imagem estará disponível no diretório informado.
Essa foi a dica de hoje, espero que tenham gostado. Se tiver alguma informação a acrescentar ou alguma curiosidade para compartilhar, fale para nós nos comentários.
Até mais!
;)
Nenhum comentário:
Postar um comentário