Pergunta

Quero analisar uma página da web no Groovy e extrair todos os links href e o texto associado a ela.

Se a página contivesse estes links:

<a href="http://www.google.com">Google</a><br />
<a href="http://www.apple.com">Apple</a>

a saída seria:

Google, http://www.google.com<br />
Apple, http://www.apple.com

Estou procurando uma resposta Groovy.Também conhecido como.O caminho fácil!

Foi útil?

Solução

Assumindo bem formado XHTML, sorver o xml, recolher todas as tags, encontrar o 'A' tags, e imprimir a href e texto.

input = """<html><body>
<a href = "http://www.hjsoft.com/">John</a>
<a href = "http://www.google.com/">Google</a>
<a href = "http://www.stackoverflow.com/">StackOverflow</a>
</body></html>"""

doc = new XmlSlurper().parseText(input)
doc.depthFirst().collect { it }.findAll { it.name() == "a" }.each {
    println "${it.text()}, ${it.@href.text()}"
}

Outras dicas

Um rápido Google Search apareceu uma boa aparência possibilidade, TagSoup .

Eu não sei java, mas eu acho que xpath é muito melhor do que expressões regulares clássicos a fim de obter um (ou mais) html elementos.

É também mais fácil de escrever e de ler.

<html>
   <body>
      <a href="1.html">1</a>
      <a href="2.html">2</a>
      <a href="3.html">3</a>
   </body>
</html>

Com o HTML acima, esta expressão "/ html / corpo / a" irá listar todos os elementos href.

Aqui está um bom tutorial passo a passo http: //www.zvon. org / XXL / XPathTutorial / general / examples.html

Use XmlSlurper para analisar o HTML como um documento XML e, em seguida, usar o método find com um fechamento apropriado para selecionar os de tags e, em seguida, usar o método lista GPathResult para obter uma lista das tags. Você deve então ser capaz de extrair o texto como filhos do GPathResult.

Tente uma expressão regular. Algo como isto deve funcionar:

(html =~ /<a.*href='(.*?)'.*>(.*?)<\/a>/).each { url, text -> 
    // do something with url and text
}

Dê uma olhada Groovy - Tutorial 4 - expressões regulares básico e Tag Anchor expressões regulares Quebrando .

A análise usando XMlSlurper só funciona se o HTMl estiver bem formado.

Se sua página HTML tiver tags não bem formadas, use regex para analisar a página.

Ex: <a href="www.google.com">

aqui, 'a' não está fechado e, portanto, não está bem formado.

 new URL(url).eachLine{
   (it =~ /.*<A HREF="(.*?)">/).each{
       // process hrefs
   }
}

Html analisador + expressões regulares Qualquer língua iria fazê-lo, embora eu diria que Perl é a solução mais rápida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top