Recentemente fora do meu trabalho, recebi algumas ofertas para atuar como freelancer. Basicamente o que o cliente queria era extrair algumas informações de páginas web e gerar alguns relatórios com isso. Nada muito complexo, mas para uma pessoa realizar o trabalho manual de abrir link por link e ler cada uma das informações para gerar o relatório, a automatização desse processo permitiria ao cliente se dedicar a realizar outras operações que agregassem mais valor ao seu trabalho.

Eu já havia tentado trabalhar com manipulação e extração de informações presentes em arquivos xml e html antes, mas nunca gostei das diretivas que o Java permitia na linguagem para conseguir retornar esses dados. A sintaxe para retornar esses dados e a quantidade de verificações, além da própria variação da página html que é lida, pode comprometer a leitura dos dados. Entre uma pesquisa e outra, e sugestões do colega de trabalho Carlos Alberto, eu acabei adotando o jsoup como biblioteca para manipular esses dados.

O diagrama abaixo mostra o fluxo que a minha extração de dados iria realizar. Em um primeiro passo o programa iria ler o html a partir do link, a partir daí eu realizaria a triagem de quais dados eu deveria retornar, e por fim adicionaria isso em um objeto.

diagramafluxo

O jsoup é uma biblioteca java que facilita o trabalho de extração e manipulação de dados usando métodos que se baseiam em DOM, CSS e ‘jquery-like’. Com o jsoup fica bem mais fácil de limpar o html com trechos que não são interessantes, como alguns cabeçalhos html, que no fim das contas acabam só atrapalhando a extração das informações. O jsoup é livre e está disponível no GitHUB.

Para começar a trabalhar com o jsoup no projeto java realizei os seguintes passos:

  • Fiz o download do jar do jsoup, onde existem opções de realizar a inserção manual dos jars no projeto ou adicionar isso no pom.xml, para os que utilizam o maven.
  • Utilizei o Try Jsoup, que é uma espécie de sandbox para o jsoup, permitindo que você consiga extrair com base em tags html ou css, as informações em tempo de execução antes de implementar o extrator usando minha aplicação em Java.

O jsoup possui simplicidade na sua utilização. Por exemplo, no trecho de código abaixo realizo a chamada a url, retornando o html que irei manipular e na sequência acesso o método select para retornar as tags que possuem a propriedade passada como parâmetro. Nesse caso, retorna os valores existentes nas tags <b>.

 

É interessante perceber que ao acessar o método text, é retornado o valor em texto puro para o select realizado, sem delimitações por tags ou lixo proveniente do html extraído.

A partir daí realizei a extração dos dados do cliente sem maiores problemas, não era algo complexo, mas era bem extenso mapear campo a campo no html. Contudo, utilizando Try Jsoup como sandbox foi bem mais fácil pra conseguir concluir.

No GitHUB deixei um projeto de exemplo (jsoup-example) com a biblioteca importada e uma chamada básica para extrair os dados do html. Até a próxima.

Share Button