2012-06-18 14 views

Respuesta

20

El paquete estándar de Go para el análisis HTML sigue siendo un trabajo en progreso y no es parte de la versión actual. Sin embargo, un paquete de terceros puede intentarlo go-html-transform. Se mantiene activamente.

+1

No encuentro ningún ejemplo sobre cómo usar esta biblioteca para raspar y no me resulta obvio en los documentos. ¿Alguien podría señalarme un ejemplo? – kristaps

+0

¿Está previsto incluir este paquete de forma nativa en Go? – Kiril

+1

El paquete HTML ya está disponible. Lea la documentación aquí: https://godoc.org/golang.org/x/net/html – R4chi7

17

Mientras que el paquete Go para el análisis de HTML todavía está en progreso, está disponible en el repositorio go.net.

Sus fuentes están en code.google.com/p/go.net/htmlgithub.com/golang/net y se está desarrollando activamente.

Se menciona en este reciente go-nuts discussion.


Tenga en cuenta que con Go 1.4 (diciembre de 2014), como he mencionado en this answer, el paquete es ahora golang.org/x/net (ver godoc).

+2

El paquete Go html se ha mudado a [go.net] (https://code.google.com/p/ go/source/browse? repo = net # hg% 2Fhtml) repo. [Aquí] (http://godoc.org/code.google.com/p/go.net/html) está la documentación. – ctn

+0

@ctn gracias por la actualización. No estoy seguro de por qué se rechazó su edición: la restauré en la respuesta. – VonC

+0

Gracias. Dijeron que cambiaría demasiado el significado original y será mejor que deje un comentario en su lugar. – ctn

6

He buscado y he encontrado que hay una biblioteca llamada Gokogiri que suena igual a Nogokiri para Ruby. Creo que el proyecto es active también.

23

Si conoces jQuery, te encantará GoQuery.

Honestamente, es la utilidad HTML más fácil y potente que he encontrado en Go, y está basada en el paquete html en el repositorio de go.net. (Está bien, es un nivel más alto que solo un analizador, ya que no expone tokens HTML sin procesar, pero si quieres hacer algo con un documento HTML, este paquete te ayudará.)

+0

Es increíble. Muchas gracias. –

0

I acaba de publicar un paquete de análisis compatible con HTML 5.0 basado en eventos de código abierto para Go. Puede find it here

Aquí está el código de ejemplo para obtener todos los enlaces de una página (a partir de los elementos A):

links := make([]string) 

parser := NewParser(htmlContent) 

parser.Parse(nil, func(e *HtmlElement, isEmpty bool) { 
    if e.TagName == "link" { 
     link,_ := e.GetAttributeValue("href") 
     if(link != "") { 
      links = appends(links, link) 
     } 
    } 
}, nil) 

algunas cosas a tener en cuenta:

  • Estos son en relación enlaces, no URL completas
  • Los enlaces generados dinámicamente no se recopilarán
  • Hay otros enlaces que no se recopilan (etiquetas META, imágenes, iframes, etc.). Es bastante fácil modificar este código para recopilarlos.
Cuestiones relacionadas