Parseando HTML com Groovy
25/06/2008 00:00
0
Ola pessoal, inaugurando minha participação no forum (hehe)
Abaixo, um pequeno exemplo de como parsear HTML usando a linguagem groovy. Para isto, vamos precisar das Libs NeKoHTML.jar e a XercesImpl.jar (para rodar o exemplo no GroovyConsole, basta copiar essas libs para a pasta lib da sua instalação do groovy)

O código a seguir realiza a seguinte operação:

1. Vai no google news e procura pelo iframe em <!-- m --><a class="postlink" href="http://news.google.com/?ned=us&amp;topic=b">http://news.google.com/?ned=us&amp;topic=b</a><!-- m -->

2. Captura a imagem do gráfico em Market Summary, situado no link <!-- m --><a class="postlink" href="http://www.google.com/pfetch/dchart?s=DJI">http://www.google.com/pfetch/dchart?s=DJI</a><!-- m -->

Primeiramente, o TestCase da bagaça exemplificando / validando o uso:


/**
*
* @author glauciom (a.k.a Proteu Alcebidiano)
*
*/
public class GoogleParserTest extends GroovyTestCase&#123;

void testMarketSummaryLink() &#123;
GoogleParser parser = new GoogleParser()
assertEquals 'http&#58;//www.google.com/pfetch/dchart?s=DJI', parser.marketSummaryLink('http&#58;//news.google.com/?ned=us&amp;topic=b')
&#125;

&#125;


E em seguida, o código que faz o bregueço funcionar:



import org.cyberneko.html.parsers.SAXParser

/**
*
* @author glauciom (a.k.a Proteu Alcebidiano)
*
*/
class GoogleParser &#123;

private BufferedReader getContentText(url) &#123;
URLConnection myConn = (HttpURLConnection) new URL(url).openConnection()
myConn.setRequestProperty(&quot;User-agent&quot;,&quot;Mozilla/4.0&quot;)
return new BufferedReader(new InputStreamReader(myConn.getInputStream()))
&#125;

def tagLink = &#123; url, tag ->
getContentText(url).withReader &#123; reader ->
return new XmlSlurper(
new SAXParser())
.parse(reader)
.depthFirst()
.grep &#123;
it.name() == tag &amp;&amp; it.@src != ''
&#125;
.'@src'
&#125;
&#125;

def marketSummaryLink(url) &#123;
String iframeLink = tagLink(url, &quot;IFRAME&quot;)[0]
String link = tagLink(iframeLink, &quot;IMG&quot;)[0]
return link
&#125;
&#125;



Considerações sobre o código:

1. O getContextText(url) é necessário em casos das páginas exigirem um agente válido para acessar a pagina que se deseja parsear (para não dar erro 403)

2. O Uso do NEKOHTML é explicitado na closure tagLink. Percebam que, com ela, a closure doi aproveitada para o uso regular de tags que contem o atributo 'src', que no caso em mãos, foi a tag IFRAME e a IMG, respectivamente.

Bom, foi apenas pra deixar registrado um exemplo de código mais completo, já que eu costumo ver exemplos destes parseardor aos pedaços por aí na net (o nekoHTML.zip do link que passei tem mais exemplos de uso, é uma boa referencia também, aqui é só pra deixar mais publico o uso).

PS.: Sou iniciante em Groovy, se alguem quiser sugerir melhoras neste snippet, fiquem à vontade!

T+
Tags: Snippets


Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto