Maison > développement back-end > Golang > le corps du texte

Web Scraping un Go

王林
Libérer: 2024-09-10 14:30:32
original
673 Les gens l'ont consulté

Premiers pas

Tout d'abord, nous devons avoir installé Go, instructions pour télécharger et installer Go.

Nous créons un nouveau dossier pour le projet, passons au répertoire et exécutons la commande suivante :

go mod init scraper
Copier après la connexion

? La commande go mod init est utilisée pour initialiser un nouveau module Go dans le répertoire où il est exécuté et crée un fichier go.mod pour suivre les dépendances du code. Gestion des dépendances

Installons maintenant Colibri :

go get github.com/gonzxlez/colibri
Copier après la connexion

? Colibri est un package Go qui nous permet d'explorer et d'extraire des données structurées sur le Web à l'aide d'un ensemble de règles définies en JSON. Référentiel


Règles d'extraction

Nous définissons les règles que colibri utilisera pour extraire les données dont nous avons besoin. Documentation

Nous allons faire une requête HTTP à l'URL https://pkg.go.dev/search?q=xpath qui contient les résultats d'une requête pour les packages Go liés à XPath dans les packages Go.

À l'aide des outils de développement inclus dans notre navigateur Web, nous pouvons inspecter la structure HTML de la page. Quels sont les outils de développement de navigateur ?

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>
Copier après la connexion

Fragment de la structure HTML qui représente un résultat de la requête.

Ensuite nous avons besoin d'un sélecteur « packages » qui trouvera tous les éléments div dans le HTML avec la classe SearchSnippet, à partir de ces éléments un sélecteur « name” prendra le texte de l'élément a à l'intérieur d'un élément h2 et un sélecteur « path" prendra la valeur de l'attribut href de l'élément a au sein d'un h2 élément . Autrement dit, « name » prendra le nom du package Go et « path » le chemin du package :)

{
    "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"
            }
        }
    }
}
Copier après la connexion
  • méthode : précise la méthode HTTP (GET, POST, PUT, ...).
  • url : URL de la requête.
  • timeout : délai d'expiration en millisecondes pour la requête HTTP.
  • sélecteurs : sélecteurs.
    • « packages » : est le nom du sélecteur.
      • expr : expression du sélecteur.
      • all: précise que tous les éléments correspondant à l'expression doivent être trouvés.
      • type : le type de l'expression, dans ce cas un sélecteur CSS.
      • sélecteurs : sélecteurs imbriqués.
        • « nom » et « chemin » sont les noms des sélecteurs et leurs valeurs sont des expressions, dans ce cas des expressions XPath.

Coder en Go

Nous sommes prêts à créer un fichier scraper.go, à importer les packages nécessaires et à définir la fonction principale :

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)
}
Copier après la connexion

? WebExtractor sont des interfaces par défaut pour Colibri prêtes à commencer à explorer ou à extraire des données sur le Web.

En utilisant la fonction New de webextractor, nous générons une structure Colibri avec ce qui est nécessaire pour commencer l'extraction des données.

Ensuite, nous convertissons nos règles en JSON en structure Rules et appelons la méthode Extract en envoyant les règles sous forme d'arguments.

Nous obtenons la sortie et l'URL de la réponse HTTP, le code d'état HTTP, le type de contenu de la réponse et les données extraites avec les sélecteurs sont imprimés à l'écran. Voir la documentation sur la structure de sortie.

Nous exécutons la commande suivante :

go mod tidy
Copier après la connexion

? La commande go mod Tidy garantit que les dépendances du go.mod correspondent au code source du module.

Enfin nous compilons et exécutons notre code en Go avec la commande :

go run scraper.go
Copier après la connexion

Conclusion

Dans cet article, nous avons appris comment effectuer du Web Scraping dans Go à l'aide du package Colibri, en définissant des règles d'extraction avec les sélecteurs CSS et XPath. Colibri apparaît comme un outil pour ceux qui cherchent à automatiser la collecte de données Web dans Go. Son approche basée sur des règles et sa facilité d'utilisation en font une option attrayante pour les développeurs de tous niveaux d'expérience.

En bref, Web Scraping in Go est une technique puissante et polyvalente qui peut être utilisée pour extraire des informations d'un large éventail de sites Web. Il est important de souligner que le Web Scraping doit être effectué de manière éthique, en respectant les termes et conditions des sites Web et en évitant de surcharger leurs serveurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal