Pregunta

Quiero analizar una página web en Groovy y extraer todos los enlaces href y el texto asociado.

Si la página contenía estos enlaces:

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

la salida sería:

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

Estoy buscando una respuesta Groovy.También conocido como.¡La manera fácil!

¿Fue útil?

Solución

Suponiendo que XHTML esté bien formado, sorba el xml, recopile todas las etiquetas, busque las etiquetas 'a' e imprima el href y el 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()}"
}

Otros consejos

Una búsqueda rápida en Google reveló una posibilidad muy atractiva, EtiquetaSopa.

No conozco Java, pero creo que XPath es mucho mejor que las expresiones regulares clásicas para obtener uno (o más) elementos HTML.

También es más fácil escribir y leer.

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

Con el html anterior, esta expresión "/html/body/a" enumerará todos los elementos href.

Aquí tienes un buen tutorial paso a paso. http://www.zvon.org/xxl/XPathTutorial/General/examples.html

Use XMLSlurper para analizar el HTML como un documento XML y luego use el método de búsqueda con un cierre apropiado para seleccionar las etiquetas a y luego use el método de lista en GPathResult para obtener una lista de las etiquetas.Entonces debería poder extraer el texto como elementos secundarios de GPathResult.

Prueba una expresión regular.Algo como esto debería funcionar:

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

Echa un vistazo a Groovy - Tutorial 4 - Conceptos básicos de las expresiones regulares y Ruptura de expresión regular de etiqueta de anclaje.

El análisis con XMlSlurper solo funciona si HTML está bien formado.

Si su página HTML tiene etiquetas no bien formadas, utilice expresiones regulares para analizar la página.

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

aquí, 'a' no está cerrada y, por tanto, no está bien formada.

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

HTML analizador + expresiones regulares cualquier idioma lo haría, aunque diría que Perl es la solución más rápida.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top