Aller au contenu
Retour au blog

Comment utiliser GoSpider : exploration, nettoyage des URL et extraction de données

Suciu DanDernière mise à jour le 24 min read
Comment utiliser GoSpider : exploration, nettoyage des URL et extraction de données
En bref : GoSpider est un robot d’exploration en ligne de commande destiné à découvrir des URL, et non un outil complet de collecte de données structurées. Ce guide d’utilisation de GoSpider présente une exploration délimitée, une gestion propre des résultats, un transfert de Colly vers un fichier CSV, ainsi qu’une procédure de diagnostic pour les réponses 403 ou les pages nécessitant un rendu JavaScript.

Le crawling Web consiste à découvrir et à parcourir automatiquement des pages Web via leurs liens. GoSpider est un robot d’exploration en ligne de commande basé sur Go qui cartographie rapidement les URL, tandis qu’un extracteur tel que Colly visite les pages sélectionnées et extrait des champs dans un schéma exploitable.

Si vous avez recherché « Comment utiliser GoSpider », la distinction la plus importante réside dans le point de transfert : GoSpider construit l’ensemble des URL candidates, puis votre code de nettoyage et d’extraction décide de ce qui deviendra des données. Cette séparation permet de maintenir une découverte suffisamment large pour trouver des pages utiles sans la mélanger avec des sélecteurs, la validation des enregistrements ou l’écriture au format CSV.

Ce tutoriel commence par un petit site de test public, explique les commandes GoSpider qui contrôlent la portée et la charge, puis transforme le résultat en un pipeline Go reproductible. Il traite également les indicateurs et les valeurs par défaut comme étant spécifiques à chaque version. Avant d’exécuter une recette, comparez-la avec gospider -h et le dépôt officiel de GoSpider, car les alias et le comportement peuvent changer d’une version à l’autre.

Comment utiliser GoSpider : ce qu’il fait et ses limites

GoSpider accepte une cible ou une liste de cibles, interroge les pages, suit les liens éligibles et signale les URL trouvées dans le code HTML, les scripts, les plans de site, les fichiers robots, les sous-domaines ou des sources externes facultatives. Cela rend le robot d’indexation GoSpider utile pour les travaux d’inventaire, la reconnaissance de sécurité sur des systèmes autorisés, les vérifications de migration et la constitution d’une file d’attente d’entrée en vue d’une extraction ultérieure.

Il ne transforme pas de lui-même des pages arbitraires en fiches de produits, d’articles ou de tableaux. GoSpider peut identifier /catalogue/a-light-in-the-attic_1000/index.html; le code d’extraction doit tout de même ouvrir cette page, sélectionner le titre et le prix, les valider et sérialiser le résultat. Un guide comparatif entre le web scraping et le web crawling est un outil utile si votre équipe a tendance à utiliser ces termes de manière interchangeable.

L’autre limite concerne le rendu. GoSpider peut inspecter les fichiers JavaScript à la recherche de chaînes de caractères ressemblant à des URL, mais il n’exécute pas une application monopage comme le ferait un navigateur. Si les données n’apparaissent qu’après un clic, un défilement, une procédure de connexion ou un appel d’API côté client, la découverte des URL peut être incomplète. Utilisez d’abord GoSpider pour les surfaces publiques, statiques ou rendues côté serveur. Ne passez à l’étape suivante qu’après avoir déterminé si l’échec est dû à la portée, au contrôle d’accès ou à l’absence d’exécution côté navigateur.

Guide de démarrage rapide : installer GoSpider et générer une liste d’URL propre

Ce premier guide d’utilisation de GoSpider utilise Books to Scrape, un site d’entraînement public, présentant une faible profondeur et une faible charge de requêtes. L’objectif n’est pas d’obtenir une couverture ou une vitesse maximales. Il s’agit d’un fichier d’URL reproductible que vous pouvez inspecter avant d’élargir la portée. Conservez la commande initiale inchangée suffisamment longtemps pour établir une base de référence, puis modifiez un paramètre à la fois. Cette approche permet d’expliquer les différences de résultats et de charge.

Installez l’interface en ligne de commande (CLI) et vérifiez votre environnement

Installez une version récente de Go en suivant les instructions d’installation officielles, puis vérifiez que la chaîne d’outils fonctionne :

go version
go env GOBIN
go env GOPATH

Au moment de la rédaction de ce document, le schéma d’installation des modules attendu est le suivant :

go install github.com/jaeles-project/gospider@latest
gospider -h

La commande d’installation, la version, les alias et les valeurs par défaut nécessitent une vérification du dépôt à jour avant publication. Considérez gospider -h votre binaire installé comme référence pour les recettes ci-dessous.

Si macOS ou Linux ne parvient pas à trouver l’exécutable et que GOBIN est vide, la documentation fournie place les binaires installés par Go dans le répertoire GOPATH bin :

export PATH="$(go env GOPATH)/bin:$PATH"
gospider -h

Ne conservez cette exportation dans le fichier de démarrage de votre shell qu’après avoir vérifié le répertoire. Sur toutes les plateformes, une GOBIN a la priorité. Conservez la sortie de go version, go env GOBINet gospider -h avec vos notes d’exécution. Ce petit enregistrement facilite grandement l’explication des raisons pour lesquelles une commande se comporte différemment sur un autre poste de travail ou après une mise à jour.

<!-- Recherches supplémentaires nécessaires : vérifier les instructions actuelles concernant GOBIN et PATH sous Windows dans la documentation Go avant d’ajouter des commandes spécifiques au système d’exploitation. -->

Lancez une première exploration limitée

Créez un répertoire de travail, puis effectuez un crawl sur un seul niveau de liens à partir de la page d’accueil :

mkdir gospider-project
cd gospider-project

gospider   -s https://books.toscrape.com/   -d 1   -c 2   -k 1   -m 20   -o output   -q

Dans les versions décrites dans le brief fourni, -s définit un site, -d 1 limite la profondeur de la récursion, -c 2 limite le nombre de requêtes simultanées pour un domaine correspondant, -k 1 ajoute un délai, -m 20 définit un délai d'expiration, -o enregistre les résultats, et -q réduit le bruit en terminal. Vérifiez chaque option par rapport à la sortie de l’aide actuelle avant d’utiliser la commande telle quelle.

Commencez par une approche prudente, même sur un site de test. La profondeur multiplie les chemins d’accès, la concurrence multiplie la charge de travail en cours, et un crawl sans délai peut générer une charge évitable. Certaines versions documentées interprètent la profondeur 0 comme une récursion illimitée ; ne l’utilisez donc pas avant d’avoir retesté ce comportement et défini une portée stricte.

Pour obtenir rapidement un flux propre, capturez les URL et dédupliquez-les :

gospider -s https://books.toscrape.com/ -d 1 -c 2 -k 1 -q   | grep -Eo 'https?://[^[:space:]]+'   | sort -u > urls.txt

Ouvrez urls.txt et vérifiez que chaque nom d’hôte et chaque chemin d’accès correspondent bien à la cible visée. Le fichier peut inclure des URL de catégories, de pagination et de ressources en plus des pages de produits. C’est normal lors de la phase de découverte. Ne compensez pas encore en augmentant la profondeur. Identifiez d’abord le modèle de chemin d’accès qui correspond aux pages que votre extracteur peut réellement traiter.

Interprétez les sorties balisées, silencieuses et au format JSON

Lancez l’exploration sans -q lorsque vous avez besoin de connaître la provenance. Sur les versions documentées, les balises distinguent les ressources demandées ([url]), les liens extraits du code HTML ([href]), les fichiers JavaScript ([javascript]) et les chaînes de caractères de type URL détectées lors de l’inspection des scripts ([linkfinder]). Vérifiez à nouveau ces étiquettes sur la version que vous avez installée.

Une sortie silencieuse est plus facile à rediriger, mais elle omet des informations contextuelles utiles. Le format JSON est préférable lorsqu’un autre programme a besoin des champs de type ou de source :

gospider -s https://books.toscrape.com/ -d 1 --json > crawl.jsonl
head -n 3 crawl.jsonl

Ne liez pas votre code de production à un schéma JSON supposé avant d’avoir inspecté un échantillon actuel et validé la manière dont les erreurs sont représentées. Les ressources statiques ou les liens exclus peuvent toujours être affichés comme des découvertes, même lorsque GoSpider ne les sollicite pas.

Configurer GoSpider par tâche d’exploration

Une configuration pratique de GoSpider repose sur quatre décisions : quels hôtes sont autorisés, jusqu’où les liens peuvent-ils être explorés, quelle charge est acceptable, et quel format de sortie votre étape suivante attend. Construisez la commande à partir de ces décisions plutôt que d’activer tous les paramètres de découverte. Indiquez à côté de la commande l’hôte visé, la profondeur maximale, le nombre cible de workers, la concurrence par domaine, le délai et le format de sortie. Ces six valeurs forment un contrat d’exploration concis que les réviseurs peuvent comprendre avant l’exécution.

Choisissez les cibles, la portée et le format de sortie

Utilisez -s pour une URL de départ et -S pour un fichier contenant plusieurs cibles. Veillez à ce que la liste des sites soit explicite, avec une URL approuvée par ligne, et stockez chaque exécution dans un répertoire de sortie daté afin que les résultats issus de différentes configurations ne soient pas mélangés.

printf '%s
'   'https://books.toscrape.com/'   'https://quotes.toscrape.com/' > sites.txt

gospider -S sites.txt -d 1 -c 2 -t 2 -o output-run-01

La découverte des sous-domaines ne doit être activée que si l’autorisation couvre ces hôtes. Déterminez si les redirections vers un autre hôte sont autorisées, et conservez séparément les résultats de chaque cible. De même, les expressions de liste blanche et de liste noire doivent limiter les requêtes aux chemins d’accès et types de fichiers pertinents. Un modèle tel que /catalogue/ permet de conserver les pages de produits, tandis que les ressources peuvent être supprimées lors du post-traitement.

Ne partez pas du principe que le filtrage modifie ce qui est affiché. Sur les versions documentées, une URL figurant sur la liste noire peut toujours apparaître comme un lien détecté même si elle n’est pas récupérée. Validez à la fois le comportement des requêtes et la sortie générée sur un petit test unitaire.

Contrôlez la profondeur, la concurrence, les threads, les délais et les délais d’expiration

La profondeur correspond au nombre de niveaux de liens suivis à partir de chaque URL de départ. -d 1 est un exemple de découverte sans risque. Augmentez cette valeur à -d 2 uniquement lorsque les premiers résultats indiquent que les pages souhaitées se trouvent un niveau plus loin. Évitez une profondeur illimitée, car les calendriers, la navigation à facettes, les paramètres de suivi et les itinéraires en double peuvent faire croître indéfiniment l’exploration.

Les paramètres de parallélisme permettent de résoudre différents problèmes :

Contrôle

Signification pratique

Risque principal

-c

Requêtes simultanées vers un domaine correspondant

Charge trop importante sur un site

-t

Cibler les collaborateurs lors du traitement d’une liste de sites

Trop de sites actifs simultanément

retard

Pause entre les requêtes

Durée d'exécution plus longue

délai d'expiration

Délai d’attente maximal pour une requête

Fausses erreurs sur les pages lentes

Pour trois sites autorisés, -t 2 -c 2 vous pouvez activer deux cibles tout en autorisant jusqu’à deux requêtes par domaine correspondant. Cela ne signifie pas qu’il n’y a que deux requêtes au total. Utilisez un délai et un timeout modéré afin que les serveurs lents ne provoquent pas une avalanche de tentatives :

gospider -S sites.txt -d 1 -t 2 -c 2 -k 1 -m 20 -o output

Les paramètres exacts -c, -t, le délai, le délai d’expiration et la sémantique de profondeur zéro dépendent de la version dans les données fournies. Notez la version de votre binaire et effectuez des tests avec un environnement local ou contrôlé avant de lancer une exécution à grande échelle. Surveillez le débit de requêtes au niveau du serveur lorsque vous en avez le contrôle. Les paramètres de concurrence côté client constituent des limites utiles, mais les redirections, les tentatives de reconnexion et les hôtes nouvellement découverts peuvent faire en sorte que le trafic observé diffère d’une simple -c × -t estimation.

Étendez la découverte à l’aide de scripts, de robots, de plans de site, de sous-domaines et de sources externes

Chaque mode d’extension ajoute une source de départ différente :

  • L’inspection JavaScript recherche dans le texte des scripts téléchargés des chaînes de caractères ressemblant à des URL. Elle n’exécute pas l’application.
  • Le traitement des robots et des plans de site peut révéler des chemins déclarés que la navigation ordinaire ne détecte pas.
  • La découverte des sous-domaines peut ajouter de nouveaux hôtes, ce qui élargit également les problèmes d’autorisation et de charge.
  • Les sources externes peuvent renvoyer des URL historiques issues d’archives ou d’index de renseignements sur les menaces.

Une recette restreinte peut combiner ces modes avec une profondeur réduite, une faible concurrence et une liste blanche d’hôtes :

gospider   -s https://example.com/   -d 1 -c 1 -k 2 -m 20   --js --robots --sitemap   --whitelist 'https://([a-z0-9-]+\.)?example\.com/'   -o discovery

N'ajoutez le sous-domaine documenté ou l' --other-source option uniquement après avoir vérifié gospider -h et après avoir confirmé que chaque hôte résultant reste dans le périmètre. Les données d’amorçage issues d’archives peuvent faire apparaître des chemins supprimés, redirigés ou sensibles ; la découverte ne constitue donc pas une autorisation pour les interroger.

Définissez les agents utilisateurs, les en-têtes, les cookies, les proxys, les filtres et la sortie JSON

Les métadonnées de requête personnalisées sont utiles lorsqu’une cible autorisée attend une locale, un compte de test ou un en-tête spécifique à l’application. Transmettez les en-têtes non confidentiels séparément :

gospider -s https://example.com/ -d 1   -H 'Accept-Language: en-US'   -H 'X-Test-Run: inventory-01'

Pour un cookie, lisez la valeur sans l’afficher et effacez-la après l’exécution :

read -s SESSION_COOKIE
gospider -s https://example.com/account/ -d 1 --cookie "$SESSION_COOKIE"
unset SESSION_COOKIE

Les arguments de ligne de commande peuvent être visibles par d’autres processus locaux ou des outils de shell. Utilisez des identifiants de test à durée de vie limitée, évitez les machines partagées, ne validez jamais de commandes contenant des jetons, et ne laissez pas l’authentification étendre le périmètre d’exploration approuvé.

Les versions documentées acceptent un proxy avec -p et une sortie structurée avec --json:

gospider -s https://example.com/ -d 1 -c 1   -p 'http://USER:PASS@proxy.example:8080'   --json > crawl.jsonl

Considérez la syntaxe du proxy, les noms de filtres, les alias, l’analyse des en-têtes, la gestion des cookies et les champs JSON comme dépendant de la version. Exécutez une requête contrôlée qui renvoie les en-têtes autorisés avant de vous fier à l’authentification ou au comportement de routage. Un proxy modifie le chemin réseau, pas votre autorisation. Pour une configuration de projet plus large, un guide de web scraping en Go peut aborder la gestion des secrets et le comportement des clients HTTP au-delà de cette interface CLI.

Recettes de commandes à copier

Ces commandes GoSpider sont des modèles, et non des recommandations en matière d’autorisations ou de charge. Remplacez les cibles, vérifiez les indicateurs actuels et testez les recettes du guide « Comment utiliser GoSpider » sur un petit périmètre autorisé avant d’augmenter la profondeur ou le parallélisme. Enregistrez chaque commande dans un cahier d’instructions en précisant son objectif et le nom d’hôte attendu. Si les résultats observés dépassent l’un ou l’autre de ces paramètres, arrêtez-vous et examinez la situation plutôt que d’ajouter des filtres après un crawl de grande envergure.

Explorations d’un seul site, d’une liste de sites et parallèles multi-cibles

Site unique, un seul niveau, faible pression :

gospider -s https://books.toscrape.com/ -d 1 -c 2 -k 1 -m 20 -o one-site

Plusieurs sites à partir d’un fichier :

https://docs.example.org/
https://status.example.org/
https://support.example.org/

Enregistrez ces lignes sous le nom sites.txt, puis exécutez :

gospider -S sites.txt -d 1 -c 2 -t 2 -k 1 -m 20 -o many-sites

Ici, -t 2 détermine le nombre de cibles répertoriées traitées en parallèle, tandis que -c 2 limite le nombre de tâches simultanées pour chaque domaine correspondant. Augmenter ces deux paramètres multiplie la charge. Si une cible redirige vers un autre hôte, vérifiez à nouveau la portée plutôt que de supposer que le même niveau de concurrence ou la même autorisation s’applique. Exécutez d’abord un exemple à deux cibles et vérifiez si le répertoire de sortie sépare les résultats comme prévu sur votre version. Si les fichiers sont fusionnés ou nommés de manière inattendue, corrigez l’importation en aval avant d’ajouter d’autres cibles.

Découverte des plans de site, des sous-domaines et des sources d’archives

Chemins déclarés dans les fichiers robots et les plans de site :

gospider -s https://example.com/ --robots --sitemap   -d 1 -c 1 -k 2 -o declared-paths

Sous-domaines autorisés, à l’aide de l’indicateur de sous-domaine indiqué dans l’aide de votre installation :

gospider -s https://example.com/ --subs   -d 1 -c 1 -k 2 -o subdomain-results

Sources historiques :

gospider -s https://example.com/ --other-source   -d 1 -c 1 -k 2 -o archive-results

Les sources tierces peuvent renvoyer de nombreuses URL obsolètes ou hors champ. Traitez leurs résultats comme des sources non fiables, et non comme une file d’attente à récupérer automatiquement. Filtrez par hôte et chemin d’accès approuvés, supprimez les URL contenant des informations confidentielles ou des identifiants d’utilisateur, et vérifiez les codes d’état avant de demander tout résultat. Pour ces trois méthodes, veillez à ce que la profondeur reste limitée, car chaque nouveau chemin découvert peut révéler une nouvelle couche de liens.

Nettoyez et validez les URL découvertes

La sortie brute du robot d’exploration est un journal d’observation, et non une file d’attente d’extraction fiable. Dans ce pipeline « Comment utiliser GoSpider », le nettoyage est une étape distincte et déterministe qui ne conserve que les URL HTTP valides correspondant aux pages que vous comptez extraire. Conservez le fichier brut immuable, écrivez les URL acceptées dans un nouveau fichier et versionnez les règles afin que chaque inclusion puisse être reproduite.

Normaliser, dédupliquer et filtrer les résultats par motifs

Un pipeline shell compact peut extraire des chaînes de caractères ressemblant à des URL, supprimer les fragments, ne conserver qu’une seule famille de chemins et dédupliquer :

grep -Eo 'https?://[^[:space:]]+' crawl.txt \
  | sed -E 's/#.*$//' \
  | grep -E '^https://books\.toscrape\.com/catalogue/' \
  | grep -Ev '/catalogue/category/' \
  | sort -u > urls.txt

Pour un filtre Go portable avec analyse explicite, enregistrez ceci sous filter.go:

package main

import (
	"bufio"
	"fmt"
	"net/url"
	"os"
	"regexp"
	"sort"
	"strings"
)

var findURL = regexp.MustCompile(`https?://[^\s"'<>()]+`)

func main() {
	seen := map[string]bool{}
	var keep []string
	s := bufio.NewScanner(os.Stdin)

	for s.Scan() {
		for _, raw := range findURL.FindAllString(s.Text(), -1) {
			raw = strings.TrimRight(raw, ".,);]")
			u, err := url.Parse(raw)
			if err != nil || u.Hostname() != "books.toscrape.com" {
				continue
			}
			if !strings.HasPrefix(u.Path, "/catalogue/") ||
				strings.HasPrefix(u.Path, "/catalogue/category/") {
				continue
			}
			u.Fragment = ""
			u.Scheme = strings.ToLower(u.Scheme)
			u.Host = strings.ToLower(u.Host)
			clean := u.String()
			if !seen[clean] {
				seen[clean] = true
				keep = append(keep, clean)
			}
		}
	}
	sort.Strings(keep)
	for _, u := range keep {
		fmt.Println(u)
	}
}

Exécutez-le avec :

go run filter.go < crawl.txt > urls.txt

La politique de normalisation dépend de l’application. La suppression de fragments est généralement sans risque pour les requêtes serveur, mais le fait de supprimer des paramètres de requête peut fusionner des pages distinctes. Déterminez si les barres obliques finales, les ports par défaut, l’encodage en pourcentage et les paramètres de suivi sont équivalents pour votre cible, puis encodez cette politique dans vos tests. Conservez l’URL d’origine à côté de la clé normalisée lorsque l’auditabilité est importante. N’oubliez pas non plus que les filtres GoSpider peuvent bloquer une requête sans pour autant supprimer le lien découvert de la sortie. Un post-traitement reste donc nécessaire.

Vérifiez un échantillon avant de passer à l’échelle

Inspectez les premiers enregistrements et examinez un petit échantillon :

head -n 20 urls.txt

head -n 10 urls.txt | while read -r url; do
  curl -sS -o /dev/null \
    -w '%{http_code} %{content_type} %{url_effective}\n' "$url"
done

Recherchez les hôtes inattendus, les variantes d’URL en double, les redirections, le contenu non HTML, les réponses 403 et les structures de chemin qui ne correspondent pas à vos sélecteurs d’extraction. Ouvrez manuellement deux ou trois pages et vérifiez que les champs souhaités existent bien dans le code HTML renvoyé. N’augmentez pas la profondeur d’exploration de GoSpider ni le volume d’extraction tant que cet échantillon n’est pas valide.

Transformez la liste d’URL en données structurées avec Colly

GoSpider a désormais terminé son travail. L’étape suivante du guide « Comment utiliser GoSpider » transmet la liste blanche nettoyée à Colly, qui récupère chaque page approuvée, exécute les callbacks des sélecteurs CSS, valide les enregistrements et génère un fichier CSV. Cette délimitation permet de remplacer la découverte des URL et de tester la logique d’extraction. Elle vous permet également de réexécuter des sélecteurs sur le même ensemble d’URL approuvées sans avoir à redécouvrir le site, ce qui est utile lorsque le balisage des pages change mais que la portée de l’exploration reste inchangée.

Créer un scraper compact URL-vers-CSV

Initialisez un module Go et ajoutez Colly :

go mod init gospider-pipeline
go get github.com/gocolly/colly/v2

Enregistrez ce qui suit sous le nom scrape.go. Les sélecteurs ciblent la page produit « Books to Scrape » utilisée dans le guide de démarrage rapide :

package main

import (
	"bufio"
	"encoding/csv"
	"log"
	"os"
	"strings"
	"time"

	"github.com/gocolly/colly/v2"
)

func main() {
	input, err := os.Open("urls.txt")
	if err != nil { log.Fatal(err) }
	defer input.Close()

	out, err := os.Create("books.csv")
	if err != nil { log.Fatal(err) }
	defer out.Close()

	writer := csv.NewWriter(out)
	defer writer.Flush()
	_ = writer.Write([]string{"url", "title", "price", "image"})

	c := colly.NewCollector(
		colly.AllowedDomains("books.toscrape.com"),
	)
	_ = c.Limit(&colly.LimitRule{
		DomainGlob:  "*books.toscrape.com*",
		Parallelism: 2,
		Delay:       time.Second,
	})

	written := map[string]bool{}

	c.OnHTML("article.product_page", func(e *colly.HTMLElement) {
		pageURL := e.Request.URL.String()
		if written[pageURL] { return }

		title := strings.TrimSpace(e.ChildText("div.product_main h1"))
		price := strings.TrimSpace(e.ChildText("p.price_color"))
		image := e.Request.AbsoluteURL(e.ChildAttr("div.item.active img", "src"))
		if title == "" || price == "" {
			log.Printf("missing fields: %s", pageURL)
			return
		}

		_ = writer.Write([]string{pageURL, title, price, image})
		written[pageURL] = true
	})

	c.OnError(func(r *colly.Response, err error) {
		log.Printf("request failed: %s status=%d err=%v",
			r.Request.URL, r.StatusCode, err)
	})

	scanner := bufio.NewScanner(input)
	count := 0
	for scanner.Scan() && count < 20 {
		u := strings.TrimSpace(scanner.Text())
		if u == "" { continue }
		if err := c.Visit(u); err != nil {
			log.Printf("visit skipped: %s err=%v", u, err)
		}
		count++
	}
	if err := scanner.Err(); err != nil { log.Fatal(err) }
}

Exécutez go run scrape.go, puis inspectez books.csv. Dans cet exemple succinct, le collecteur traite le fichier de manière synchrone, tandis que la règle de limitation impose un rythme et laisse la possibilité d’adopter une collecte asynchrone ultérieurement. Si vous activez les visites asynchrones, protégez les cartes partagées et les écritures CSV, ou acheminez les enregistrements via une seule goroutine d’écriture. Le OnHTML se déclenche pour les éléments correspondants ; ainsi, un fichier vide signifie généralement que le sélecteur, le contenu de la réponse ou le filtre d’URL est incorrect. Si votre cible réelle est de nature tabulaire, le guide sur le scraping de tableaux HTML en Golang avec Colly constitue la référence suivante tout indiquée.

Testez, limitez le débit et renforcez la sécurité de l’étape d’extraction

Conservez la limite initiale à 20 URL. Vérifiez les en-têtes, le nombre de lignes, l’encodage, les champs obligatoires, le comportement en cas de doublons et les URL d’images avant de supprimer cette limite. Enregistrez les codes d’état et les URL ayant échoué, mais n’enregistrez jamais les cookies ni les en-têtes d’autorisation.

Utilisez AllowedDomainsun délai et un faible parallélisme, même si les données d’entrée ont déjà été filtrées. N’ajoutez des tentatives de réessai que pour les échecs transitoires tels que les délais d’expiration ou certaines réponses 5xx, avec une limite stricte de tentatives et un délai de réessai. Ne réessayez pas aveuglément les réponses 403 ou 404. En production, écrivez dans un fichier CSV temporaire et ne le renommez qu’une fois que l’exécution a passé la validation, afin qu’une sortie partielle ne soit pas confondue avec un ensemble de données complet. Ajoutez un manifeste d’exécution contenant le hachage des données d’entrée, la version du sélecteur, l’heure de début, le nombre de succès et le nombre d’échecs. Cela permet de mesurer une réexécution au lieu de se fier aux journaux du terminal.

Dépanner les échecs et choisir l’outil suivant

Un bon diagnostic « Comment utiliser GoSpider » commence par la classification de l’échec. Vérifiez d’abord l’installation et la portée de l’exploration, puis l’accès HTTP, puis le rendu. Changer d’outil avant d’avoir identifié la couche concernée ajoute souvent de la complexité sans résoudre la cause du problème. Capturez une URL défaillante, la commande exacte, le code d’état, le type de réponse et indiquez si l’élément manquant existe dans le code HTML brut. Ces éléments permettent généralement d’identifier la bonne branche en quelques minutes.

Diagnostiquer les problèmes courants de GoSpider

Symptôme

À vérifier en premier

Action corrective

gospider: command not found

go env GOBIN, go env GOPATH, puis PATH

Ajoutez le répertoire contenant le binaire Go, puis relancez gospider -h

Résultats vides

URL de départ, redirections, profondeur, code HTML renvoyé

Désactiver le mode silencieux, réduire les filtres et tester une page publique

Sortie trop bruyante

Liens vers les ressources, navigation, variantes de requêtes

Normalisation et filtrage par motifs après l'exploration

Timeouts fréquents

Latence du serveur, délais d’expiration, pression sur les requêtes

Réduire -c, ajouter un délai, augmenter le délai d’expiration avec prudence

L'exploration ne cesse de s'étendre

Profondeur zéro, calendriers, facettes, sous-domaines

Arrêtez l’exécution, utilisez une profondeur finie et restreignez la portée hôte/chemin

URL semblant être des doublons

Fragments, casse, ordre des requêtes, redirections

Appliquez une politique de normalisation explicite

Les liens figurant sur la liste noire s’affichent toujours

Différence entre la découverte et la récupération

Vérifier les journaux de requêtes et filtrer séparément les résultats générés

Les résultats diffèrent d'une machine à l'autre

Version binaire, indicateurs, chemin réseau

Capture gospider -h, informations de version et un dispositif de test

Déboguez avec une seule URL et une sortie balisée avant de modifier plusieurs indicateurs. Si une simple page générée par le serveur fonctionne, l’installation est probablement correcte. Comparez une URL dont vous savez qu’elle fonctionne avec une URL défaillante en utilisant les mêmes indicateurs, afin de ne modifier qu’une seule variable à la fois. Si les URL sont trouvées mais que les chemins erronés prédominent, corrigez la portée ou effectuez un nettoyage. Si les requêtes renvoient un code 403, vérifiez les droits d’accès. Si le code HTML ne contient pas de contenu visible dans un navigateur, vérifiez le rendu.

Gérez les réponses 403 sans faire de suppositions

Une réponse HTTP 403 signifie que le serveur a compris la requête mais l’a refusée. Cela peut indiquer un manque d’autorisation, une session authentifiée requise, une règle de politique, une limitation de débit ou des contrôles anti-bot. Ce n’est pas la preuve qu’un proxy soit la solution appropriée.

Procédez dans l’ordre suivant :

  1. Vérifiez que l’exploration est autorisée et que l’URL est dans le périmètre.
  2. Envoyez une requête vers une URL avec une sortie balisée ou curl et inspectez les redirections et les en-têtes de réponse.
  3. Vérifiez si le site nécessite une connexion, un cookie, un référent, une locale ou un agent utilisateur documenté.
  4. Réduisez la concurrence et ajoutez un délai. Une exploration par rafales peut déclencher des contrôles qu’une requête manuelle ne déclenche pas.
  5. Si le problème avéré concerne la réputation de l’adresse IP ou la localisation géographique, utilisez un proxy approuvé avec des identifiants à durée de vie limitée.
  6. Si la gestion des tentatives de connexion, la rotation des proxys et le traitement des CAPTCHA ne relèvent pas du projet, envisagez une API de scraping générique.

Ne tentez pas de contourner les autorisations de compte, les paywalls ou les contrôles d’accès explicites. Un guide détaillé sur le scraping web sans se faire bloquer peut aider à optimiser la qualité des requêtes, mais l’autorisation reste la première exigence.

Sachez quand le rendu JavaScript nécessite un navigateur ou une API

Trouver une URL dans un bundle JavaScript relève de l’analyse de texte. Le rendu d’une page implique l’exécution de scripts, la gestion de l’état du navigateur, l’attente d’une activité réseau et, parfois, des clics ou du défilement. L’option de découverte JavaScript de GoSpider répond à la première tâche, mais pas à la seconde.

Utilisez un test en trois étapes :

  • Si le lien et les données souhaités sont présents dans la réponse HTTP d’origine, GoSpider associé à Colly suffit.
  • Si le code HTML est principalement une coque d’application mais qu’un point de terminaison JSON public fournit les données, explorez les points de terminaison autorisés et extrayez les données de leurs réponses.
  • Si le contenu n’apparaît qu’après l’exécution ou l’interaction du navigateur, utilisez l’automatisation du navigateur ou un service de navigateur hébergé.
  • Si la page est statique mais systématiquement bloquée au niveau de la couche de requête, envisagez une API de requêtes gérée plutôt que l’automatisation du navigateur.

Comparez la « source » avec le DOM du navigateur et inspectez le panneau réseau lors d’un test autorisé. Choisissez l’outil le moins complexe qui reproduit la réponse requise. Les navigateurs gèrent le rendu et l’interaction, mais ils consomment plus de mémoire et nécessitent une gestion du cycle de vie, des délais d’expiration et des sessions.

GoSpider vs hakrawler, Colly et les robots d’exploration basés sur navigateur

Au niveau des catégories, GoSpider et hakrawler sont des outils de découverte d’URL orientés CLI, Colly est un framework Go programmable dédié au crawling et à l’extraction, tandis que les crawlers basés sur navigateur exécutent du code côté client. Le choix approprié dépend du type de transfert dont vous avez besoin :

Catégorie d’outils

Découverte d’URL

Extraction structurée

Rendu JavaScript

Adéquation opérationnelle

GoSpider

Découverte étendue, pilotée par des indicateurs

Étape distincte requise

Pas d'exécution dans le navigateur

Inventaire rapide avant extraction

hakrawler

Découverte de liens via l'interface en ligne de commande

Étape distincte requise

Pas d'exécution dans le navigateur

Workflows de découverte légers

Colly

Parcours défini par le code

Callbacks CSS et logique Go

Pas d'exécution dans le navigateur en soi

Scrapers Go personnalisés et testables

Robot d’exploration du navigateur

Basé sur le DOM et les interactions

Sélecteurs DOM ou scripts de page

Oui

SPA, formulaires, défilement et sessions

Pour choisir entre GoSpider et Colly, privilégiez GoSpider lorsque l’étendue de la découverte et la composition en ligne de commande sont importantes. Privilégiez Colly lorsque les règles d’extraction et la validation des enregistrements sont prioritaires. N’utilisez un navigateur que lorsque la cible nécessite réellement une exécution ou une interaction.

Liste de contrôle pour un crawling responsable

Avant chaque exécution :

  • Obtenez les autorisations nécessaires et définissez les hôtes, chemins d’accès, comptes et champs autorisés.
  • Utilisez une profondeur finie, une faible concurrence, des délais, des délais d’expiration et un nombre limité d’URL.
  • Passez en revue les conditions d’utilisation et le protocole d’exclusion des robots. Les règles relatives aux robots guident les robots d’exploration, mais ne constituent pas une autorisation légale.
  • Interrompez l'exploration en cas d'erreurs, de latence ou d'augmentation inattendue de la charge du serveur.
  • Ne pas inclure de cookies, de jetons ni d’identifiants de proxy dans le code et les journaux.
  • Ne collectez pas de données sensibles au seul motif qu’une URL est accessible.
  • Enregistrez la version, la commande, l’heure et la politique de sortie à des fins d’audit.

Un cadre juridique et de conformité dédié au web scraping peut transformer ces vérifications en un processus de contrôle reproductible.

Foire aux questions

Le comportement de GoSpider dépend de la version installée, de la cible et des modes de découverte activés. Avant la mise en production, enregistrez gospider -h, notez la version ou le commit du module, et conservez un petit crawl de test avec le résultat attendu. Cette dernière FAQ se concentre sur les limites conceptuelles qui restent utiles même lorsque des alias, des valeurs par défaut, des balises ou des champs JSON spécifiques changent. Elle évite également de présenter des valeurs par défaut spécifiques à une version comme des recommandations intemporelles.

Points clés

  • Utilisez GoSpider pour découvrir des URL, puis effectuez la normalisation, la validation et l’extraction structurée en étapes distinctes.
  • Commencez par une profondeur finie, une faible concurrence par domaine, un délai et un petit ensemble de cibles autorisées.
  • -c contrôle la concurrence des requêtes au niveau du domaine, tandis que -t contrôle le traitement parallèle entre les cibles d’une liste de sites, sous réserve d’une vérification de version.
  • Considérez les modes « quiet », « JSON », les filtres, les modes de découverte et les indicateurs de proxy comme sensibles à la version. Testez-les sur un environnement de test contrôlé.
  • Évaluez séparément la portée, l’accès HTTP et le rendu du navigateur avant de changer d’outil.

FAQ

GoSpider est-il un robot d’indexation ou un outil de scraping ?

GoSpider est avant tout un robot d’indexation. Il découvre et suit les URL, cartographie la structure des sites et peut extraire des liens provenant de plusieurs sources. Il ne convertit généralement pas des pages arbitraires en enregistrements validés de produits, d’articles ou de tableaux. Cette étape d’extraction structurée relève du code d’analyse syntaxique, d’un framework de scraping ou d’une autre couche d’extraction de données.

Quelle est la différence entre les options -c et -t de GoSpider ?

-c contrôle le nombre de requêtes simultanées associées à un domaine correspondant, tandis que -t -t contrôle le nombre de sites cibles d’une liste pouvant être traités en parallèle sur les versions documentées. Leur combinaison multiplie les possibilités d’activité. La sémantique et les valeurs par défaut pouvant évoluer, vérifiez ces deux options à l’aide de l’aide intégrée et d’un test contrôlé sur plusieurs sites.

L’option JavaScript de GoSpider exécute-t-elle du code côté client ?

Non. La fonctionnalité JavaScript documentée inspecte les scripts à la recherche de chaînes de caractères ressemblant à des URL plutôt que d’exécuter un moteur de navigateur. Elle peut révéler des points de terminaison ou des routes intégrés dans des paquets, mais elle ne reproduira pas les mises à jour du DOM, les clics, le défilement infini ou l’état de l’application créé par l’exécution de JavaScript.

Pourquoi une URL exclue ou mise sur liste noire peut-elle encore apparaître dans le résultat ?

Un filtre peut empêcher GoSpider d’interroger une URL correspondante sans pour autant effacer le fait que le lien a été découvert dans le code HTML ou une autre source. Par conséquent, l’URL peut tout de même être générée en tant qu’enregistrement de découverte. Vérifiez ce comportement sur votre version, puis appliquez un filtre de sortie distinct avant l’extraction.

Quand faut-il associer GoSpider à Colly, à un proxy, à une API de scraping ou à un navigateur ?

Associez-le à Colly pour une extraction structurée à partir de code HTML accessible, à un proxy approuvé lorsque l’emplacement réseau ou la réputation de l’adresse IP constituent un obstacle avéré, à une API de requête lorsque la gestion des blocages est trop coûteuse sur le plan opérationnel, et à un navigateur lorsque le contenu nécessite l’exécution de JavaScript ou une interaction. Les vérifications d’autorisation et de périmètre doivent toujours précéder le choix de l’option.

Conclusion

La réponse fiable à la question de savoir comment utiliser GoSpider est de le considérer comme l’étape de découverte d’un pipeline. Installez-le via la chaîne d’outils Go, vérifiez la sortie d’aide actuelle, puis commencez par un crawl superficiel et progressif. Utilisez -S, -cet -t de manière réfléchie lorsque vous étendez l’exploration à d’autres cibles, et n’activez les plans de site, les fichiers robots, les scripts, les sous-domaines ou les sources externes que lorsque ces sources restent dans le périmètre autorisé.

Les résultats du robot d’exploration nécessitent encore un travail d’ingénierie. Normalisez les URL, supprimez les doublons, appliquez les règles d’hôte et de chemin d’accès, et échantillonnez les codes d’état avant d’envoyer la liste à Colly. Au stade de l’extraction, utilisez des listes blanches de domaines, un faible parallélisme, la validation des champs et une gestion atomique des résultats. Lorsqu’une exécution échoue, classez-la comme un problème de périmètre, un problème d’accès HTTP ou un problème de rendu avant de recourir à un autre outil.

Si les pages rendues côté serveur sont systématiquement bloquées et que vous souhaitez que le pipeline reste centré sur le HTML brut et l’analyse par Colly, l’API Scraper de WebScrapingAPI peut gérer la rotation des proxys, les CAPTCHA et le blocage des requêtes derrière un seul point de terminaison. N’utilisez ce transfert qu’après avoir confirmé que le problème se situe au niveau de la couche de requête, et non pas en raison d’une interaction manquante avec le navigateur ou d’une autorisation insuffisante.

À propos de l'auteur

Suciu Dan, cofondateur @ WebScrapingAPI

Suciu Dan

cofondateur

Suciu Dan est le cofondateur de WebScrapingAPI et rédige des guides pratiques destinés aux développeurs sur le web scraping avec Python et Ruby, ainsi que sur les infrastructures de proxy.

Web scraping avec AWS Lambda : guide pour Python et Java 2026
Guides

Web scraping avec AWS Lambda : guide pour Python et Java 2026

En bref : le web scraping avec AWS Lambda fonctionne mieux lorsque chaque invocation est courte, bien délimitée et peut faire l'objet d'une nouvelle tentative de manière indépendante. Commencez par utiliser les requêtes HTTP directes, AWS SAM et S3, puis ajoutez SQS, des conteneurs, le rendu dans un navigateur, des proxys ou une couche de récupération gérée uniquement lorsque la charge de travail démontre qu'elle en a besoin.

Suciu Dan33 min read
Lire l'article
Comment récupérer les données de Redfin : Guide Python des données immobilières
Guides

Comment récupérer les données de Redfin : Guide Python des données immobilières

TL;DR : Redfin expose des points d'extrémité d'API cachés qui renvoient du JSON structuré pour les listes de propriétés, ce qui permet d'ignorer complètement l'analyse HTML fragile. Ce guide vous accompagne dans la construction d'un scraper Python qui extrait les données de location et de vente, effectue des recherches par emplacement, surveille les nouvelles inscriptions via des sitemaps XML et exporte des résultats propres au format CSV ou JSON.

Suciu Dan15 min read
Lire l'article
XPath Web Scraping : Un guide pratique avec des exemples en Python
Guides

XPath Web Scraping : Un guide pratique avec des exemples en Python

TL;DR : XPath est un langage de requête permettant de naviguer dans les arbres HTML/XML par chemin, attribut ou contenu textuel. Ce guide couvre la syntaxe, les axes et les fonctions XPath, puis montre des scrapers Python fonctionnels avec lxml et Selenium. Vous obtiendrez également un aide-mémoire consolidé et une section de dépannage pour les erreurs XPath les plus courantes.

Suciu Dan11 min read
Lire l'article

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.