Parseando HTML com Groovy
Postado em 25/06/2008 00:00
0
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
Proteu Alcebidiano
Pontos: 0





 


Esqueceu sua senha?
 
Grails Brasil é mantido por itexto Desenvolvimento de Projetos Ltda.
Em caso de problemas, sinta-se livre para procurar Henrique Lobo Weissmann (Kico) por e-mail: kicolobo@itexto.net
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão (clique no logo à direita para maiores detalhes)