html - que - ¿Cómo se analiza una página web y se extraen todos los enlaces href?
hipervinculos en html ejemplos (7)
Quiero analizar una página web en Groovy y extraer todos los enlaces href y el texto asociado con ella.
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. AKA. ¡La manera fácil!
Analizador Html + Expresiones regulares Cualquier lenguaje lo haría, aunque diría que Perl es la solución más rápida.
Asumiendo XHTML bien formado, sorbe el xml, recolecte todas las etiquetas, encuentre 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..com/"></a>
</body></html>"""
doc = new XmlSlurper().parseText(input)
doc.depthFirst().collect { it }.findAll { it.name() == "a" }.each {
println "${it.text()}, ${[email protected]()}"
}
El análisis usando XMlSlurper solo funciona si HTMl está bien formado.
Si su página HTMl tiene etiquetas no bien formadas, entonces use regex para analizar la página.
Por <a href="www.google.com">
: <a href="www.google.com">
aquí, ''a'' no está cerrado y, por lo tanto, no está bien formado.
new URL(url).eachLine{
(it =~ /.*<A HREF="(.*?)">/).each{
// process hrefs
}
}
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" listará todos los elementos href.
Aquí hay un buen tutorial paso a paso http://www.zvon.org/xxl/XPathTutorial/General/examples.html
Prueba una expresión regular. Algo como esto debería funcionar:
(html =~ /<a.*href=''(.*?)''.*>(.*?)<//a>/).each { url, text ->
// do something with url and text
}
Eche un vistazo a Groovy - Tutorial 4 - Conceptos básicos de expresiones regulares y Bucle de expresión regular de etiqueta de anclaje .
Una rápida búsqueda en Google arrojó una buena apariencia, TagSoup .
Use XMLSlurper para analizar el HTML como un documento XML y luego use el método find 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. Debería poder extraer el texto como secundarios de GPathResult.