Web Scraping a Go

王林
Release: 2024-09-10 14:30:30
Original
600 people have browsed it

Primeros pasos

En primer lugar debemos de tener instalado Go, Instrucciones para descargar e instalar Go.

Creamos una nueva carpeta para el proyecto, nos movemos al directorio y ejecutamos el siguiente comando:

go mod init scraper
Copy after login

? El comando go mod init se utiliza para inicializar un nuevo módulo Go en el directorio donde se ejecuta y crea un archivo go.mod para rastrear las dependencias del código. Gestión de dependencias

Ahora instalemos Colibri:

go get github.com/gonzxlez/colibri
Copy after login

? Colibri es un paquete Go que nos permite rastrear y extraer datos estructurados en la web usando un conjuntos de reglas definidas en JSON. Repositorio


Reglas de extracción

Definimos las reglas que usara colibri para extraer los datos que necesitamos. Documentación

Vamos a realizar una petición HTTP a la URL https://pkg.go.dev/search?q=xpath la cual contiene los resultados de una consulta de paquetes Go relacionados con xpath en Go Packages.

Usando las herramientas de desarrollo incluidas en nuestro navegador web, podemos inspeccionar la estructura HTML de la página. ¿Cuáles son las herramientas de desarrollo del navegador?

Web Scraping en Go

<div class="SearchSnippet">
   <div class="SearchSnippet-headerContainer">
      <h2>
         <a href="/github.com/antchfx/xpath" data-gtmc="search result" data-gtmv="0" data-test-id="snippet-title">
         xpath
         <span class="SearchSnippet-header-path">(github.com/antchfx/xpath)</span>
         </a>
      </h2>
   </div>
   <div class="SearchSnippet-infoLabel">
      <a href="/github.com/antchfx/xpath?tab=importedby" aria-label="Go to Imported By">
      <span class="go-textSubtle">Imported by </span><strong>143</strong>
      </a>
      <span class="go-textSubtle">|</span>
      <span class="go-textSubtle">
      <strong>v1.2.5</strong> published on <span data-test-id="snippet-published"><strong>Oct 26, 2023</strong></span>
      </span>
      <span class="go-textSubtle">|</span>
      <span data-test-id="snippet-license">
      <a href="/github.com/antchfx/xpath?tab=licenses" aria-label="Go to Licenses">
      MIT
      </a>
      </span>
   </div>
</div>
Copy after login

Fragmento de la estructura HTML que representa un resultado de la consulta.

Entonces necesitamos un selector “packages” que encontrará todos los elementos div en el HTML con la clase SearchSnippet, de esos elementos un selector “name” tomará el texto del elemento a dentro de un elemento h2 y un selector “path” tomará el valor del atributo href del elemento a dentro de un elemento h2. En otras palabras, “name” tomará el nombre del paquete Go y “path” la ruta del paquete :)

{
    "method": "GET",
    "url":    "https://pkg.go.dev/search?q=xpath",
    "timeout": 10000,
    "selectors": {
        "packages": {
            "expr": "div.SearchSnippet",
            "all": true,
            "type": "css",
            "selectors": {
                "name": "//h2/a/text()",
                "path": "//h2/a/@href"
            }
        }
    }
}
Copy after login
  • method: especifica el método HTTP (GET, POST, PUT, ...).
  • url: URL de la solicitud.
  • timeout: límite de tiempo en milisegundos para la solicitud HTTP.
  • selectors: selectores.
    • “packages”: es el nombre del selector.
      • expr: expresión del selector.
      • all: especifica que se deben encontrar todos los elementos que coincidan con la expresión.
      • type: el tipo de expresión, en este caso un selector CSS.
      • selectors: selectores anidados.
        • “name” y “path” son los nombre de los selectores y sus valores son expresiones, en este caso expresiones XPath.

Código en Go

Estamos listos para crear un archivo scraper.go, importar los paquetes necesarios y definir la función main:

package main

import (
    "encoding/json"
    "fmt"

    "github.com/gonzxlez/colibri"
    "github.com/gonzxlez/colibri/webextractor"
)

var rawRules = `{
    "method": "GET",
    "url":    "https://pkg.go.dev/search?q=xpath",
    "timeout": 10000,
    "selectors": {
        "packages": {
            "expr": "div.SearchSnippet",
            "all": true,
            "type": "css",
            "selectors": {
                "name": "//h2/a/text()",
                "path": "//h2/a/@href"
            }
        }
    }
}`

func main() {
    we, err := webextractor.New()
    if err != nil {
        panic(err)
    }

    var rules colibri.Rules
    err = json.Unmarshal([]byte(rawRules), &rules)
    if err != nil {
        panic(err)
    }

    output, err := we.Extract(&rules)
    if err != nil {
        panic(err)
    }

    fmt.Println("URL:", output.Response.URL())
    fmt.Println("Status code:", output.Response.StatusCode())
    fmt.Println("Content-Type", output.Response.Header().Get("Content-Type"))
    fmt.Println("Data:", output.Data)
}
Copy after login

? WebExtractor son interfaces predeterminadas para Colibri listas para comenzar a rastrear o extraer datos en la web.

Usando la función New de webextractor, generamos una estructura Colibri con lo necesario para comenzar a extraer datos.

Luego convertimos nuestras reglas en JSON a una estructura Rules y llamamos al método Extract enviando como argumento las reglas.

Obtenemos la salida y se imprimen en pantalla la URL de la respuesta HTTP, el código de estado HTTP, el tipo de contenido de la respuesta y los datos extraídos con los selectores. Consulte la documentación de la estructura Output.

Ejecutamos el siguiente comando:

go mod tidy
Copy after login

? El comando go mod tidy se asegura de que las dependencias en el go.mod coinciden con el código fuente del módulo.

Finalmente compilamos y ejecutamos nuestro código en Go con el comando:

go run scraper.go
Copy after login

Conclusión

En este post, hemos aprendido cómo realizar Web Scraping en Go utilizando el paquete Colibri, definiendo reglas de extracción con selectores CSS y XPath. Colibri emerge como una herramienta para aquellos que buscan automatizar la recopilación de datos web en Go. Su enfoque basado en reglas y su facilidad de uso la convierten en una opción atractiva para desarrolladores de todos los niveles de experiencia.

En definitiva, el Web Scraping en Go es una técnica poderosa y versátil que puede utilizarse para extraer información de una amplia gama de sitios web. Es importante destacar que el Web Scraping debe realizarse de manera ética, respetando los términos y condiciones de los sitios web y evitando sobrecargar sus servidores.

The above is the detailed content of Web Scraping a Go. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!