Mostrando postagens com marcador JSOUP. Mostrar todas as postagens

quinta-feira, 4 de agosto de 2016

Download de imagens com JSOUP

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!

;)

quinta-feira, 2 de junho de 2016

Web Scraping com Jsoup

Fala galera!

Em nosso post sobre web scraping, falamos um pouco do que é e como é utilizado esta técnica muito útil. Então resolvi compartilhar com vocês um implementação simples de web scraping em java utilizando a biblioteca Jsoup.



A biblioteca Jsoup foi desenvolvida para trabalhar com HTML para realizar a extração e manipulação de dados, usando métodos do DOM, CSS e métodos jQuery. É um projeto open source e está disponível no GitHub.

Let's get started!

Antes de começar, é preciso acessar a página de download do Jsoup e baixar os jars disponíveis. Se você utiliza maven, poderá copiar a dependência e inserir em seu pom.xml:

<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupid>org.jsoup</groupid>
  <artifactid>jsoup</artifactid>
  <version>1.9.2</version>
</dependency>

Assim que estiver tudo certo em seu projeto, criaremos uma classe de teste.
Esta classe ficará da seguinte forma:

package com.deviscoming;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class ExemploJSoup {

 public static void main(String[] args) {

  try {
   Document doc = Jsoup.connect("http://www.google.com").get();
   String titulo = doc.title();
   System.out.println("Título do site: " + titulo );
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

No console de sua IDE será possível visualizar a mensagem com o título do site:

Título do site: Google

Para obter toda a página Html, é preciso utilizar o método estático Jsoup.connect() e utilizar o método get(), pois, desta forma, você obterá um objeto Document. Este objeto possui um documento HTML armazenado internamente. Então para obter informações da página, basta utilizar os métodos disponíveis a partir deste objeto.

Caso queira obter elementos específicos, você pode utilizar o método select(). Ele retorna um objeto Elements, sendo este objeto um conjunto de objetos Element.

package com.deviscoming;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class ExemploJSoup {

 public static void main(String[] args) {

  try {
   Document doc = Jsoup.connect("http://www.google.com").get();
   String titulo = doc.title();  
   //System.out.println("Título do site: " + titulo );
   
   //exibe todas as tags a existentes na página html   
   System.out.println("Links do site (tags a): " + doc.select("a"));

   //exibe o texto da tag a      
   System.out.println("href: "+doc.select("a").text());
    
   //exibe todas as tags que possuem o atributo href   
   Elements elements = doc.select("a[href]");
   for(int i = 0; i < elements.size();i++){
    System.out.println("href: "+elements.get(i).text());
   }     
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

Para ter mais informações sobre essa biblioteca, aconselho a acessarem o site do Jsoup, lá tem várias dicas, downloads e a documentação completa para consulta. Acessem também o site Raspando web com Jsoup, de onde foi tirado o conteúdo deste post e lá tem mais dicas e informações essenciais para o desenvolvimento do seu projeto. E também acessem o GitHub, analisem, estudem e quem sabe você não acaba se tornando parte da equipe de desenvolvimento? rsrsr

Até mais!

;)