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
? 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
? 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
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 ?
<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>
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" } } } }
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) }
? 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
? 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
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!