Dans le monde du développement web et du commerce en ligne, il est souvent utile de pouvoir extraire automatiquement des informations depuis un site web. Que ce soit pour suivre les prix des produits, analyser la concurrence ou collecter des données pour un projet personnel, cette pratique est connue sous le nom de « scraping ». Le scraping consiste à parcourir un site web pour en récupérer certaines informations de manière automatisée. Aujourd’hui, nous allons coder un outil en PHP avec le framework Goutte pour scraper les prix d’un produit.
Pour les développeurs PHP, l’un des outils les plus efficaces et simples à utiliser pour le scraping est Goutte. Ce framework léger vous permet de récupérer le contenu d’une page web, de naviguer dans sa structure HTML et d’extraire exactement les données dont vous avez besoin, le tout avec un code clair et lisible.
Dans ce tutoriel, nous allons explorer en détail Goutte : ce que c’est, à quoi il sert, ses avantages, ses limites, comment l’installer et l’utiliser, et nous terminerons avec un exemple pratique complet pour scraper le prix d’un produit sur une page web. Ce tutoriel est rédigé avec des explications détaillées pour chaque étape afin que vous puissiez suivre facilement.
- Qu’est-ce que Goutte, le framework PHP ?
- Qu'est ce que le scraping et scraper ?
- Installer Goutte et configurer votre projet PHP
- Vérifier l’installation
- Créer un outil PHP pour scraper le prix d’un produit avec Goutte
- Étape 1 : Préparer votre fichier PHP
- Étape 2 : Créer une instance du client Goutte
- Étape 3 : Charger la page du produit
- Étape 4 : Identifier le sélecteur CSS du prix
- Étape 5 : Extraire le prix avec Goutte
- Étape 6 : Gérer les erreurs et l’absence de prix
- Étape 7 : Transformer le prix en nombre utilisable
- Étape 8 : Ajouter une fonction pour réutiliser le scraper
- Étape 9 : Récupérer plusieurs informations d’un produit
- Étape 10 : Scraper plusieurs produits en boucle
- Étape 11 : Gérer les sites plus complexes
- Étape 12 : Respecter les bonnes pratiques et éviter le blocage
- Étape 13 : Stocker les données
- Conseils pour aller plus loin avec Goutte
- Pourquoi Goutte est un excellent choix pour le scraping
Qu’est-ce que Goutte, le framework PHP ?
Goutte est une bibliothèque PHP qui facilite le scraping de pages web. Développée pour simplifier la récupération et l’analyse de contenu HTML, elle repose sur plusieurs composants solides de Symfony, notamment DomCrawler et BrowserKit.
Concrètement, Goutte permet de simuler un navigateur web, de charger une page, de parcourir son HTML et d’extraire les informations souhaitées. Vous pouvez par exemple récupérer le texte d’un élément, un attribut spécifique comme un lien ou une image, ou même interagir avec des formulaires comme si vous étiez un utilisateur.
Les avantages de Goutte
Goutte offre plusieurs avantages qui en font un outil très prisé pour le scraping en PHP. Premièrement, il est léger et facile à installer, sans nécessiter de dépendances lourdes comme un vrai navigateur. Deuxièmement, il utilise une syntaxe simple et intuitive, ce qui le rend accessible même aux débutants en PHP. Enfin, grâce à son intégration avec DomCrawler, il permet de naviguer dans la structure HTML d’une page avec des sélecteurs CSS ou XPath, ce qui est très pratique pour cibler précisément les données à extraire.
Les limites de Goutte
Malgré ses nombreux avantages, Goutte présente certaines limites. Comme il ne s’agit pas d’un vrai navigateur, il ne peut pas exécuter le JavaScript présent sur une page. Ainsi, si un site charge dynamiquement des informations via JavaScript, Goutte ne pourra pas les récupérer directement. De plus, certains sites peuvent détecter et bloquer les robots, ce qui peut compliquer le scraping. Enfin, le scraping doit toujours être effectué dans le respect des conditions d’utilisation du site et de la législation en vigueur.
Qu’est ce que le scraping et scraper ?
Le terme « scraper » vient de l’anglais « to scrape », qui signifie « gratter » ou « racler ». Dans le contexte du web, scraper signifie récupérer automatiquement des informations à partir d’un site internet.
Cette technique est utilisée pour extraire des textes, des images, des prix, des liens ou toute autre donnée structurée sur une page web.
Scraper peut paraître simple, mais il est important de comprendre que toutes les données ne sont pas accessibles de la même manière. Certains sites présentent leur contenu directement dans le HTML, ce qui rend le scraping facile. D’autres utilisent JavaScript pour générer du contenu après le chargement de la page, ce qui complique l’extraction avec des outils comme Goutte.
Installer Goutte et configurer votre projet PHP
Préparer votre environnement PHP
Avant de commencer à utiliser Goutte, il est nécessaire de vérifier que votre environnement PHP est prêt. Goutte fonctionne avec PHP 7.4 ou supérieur et nécessite Composer, le gestionnaire de dépendances pour PHP. Si vous n’avez pas encore Composer, vous pouvez le télécharger et l’installer depuis le site officiel getcomposer.org.
Pour vérifier que Composer est installé correctement, ouvrez votre terminal et tapez :
composer --versionSi la commande retourne un numéro de version, vous êtes prêt à continuer. Sinon, il faudra suivre les instructions d’installation de Composer selon votre système d’exploitation.
Créer un projet PHP pour Goutte
Il est recommandé de créer un nouveau projet dédié au scraping pour garder votre code organisé. Pour cela, choisissez un dossier sur votre ordinateur et créez un projet avec Composer. Ouvrez votre terminal à ce dossier et tapez :
Installer Goutte via Composer
Une fois le projet créé, l’étape suivante consiste à installer Goutte. Dans le terminal, placez-vous dans le dossier de votre projet et tapez :
composer require fabpot/goutteCette commande télécharge Goutte et toutes ses dépendances dans le dossier vendor de votre projet. Vous pourrez ensuite inclure l’autoloader de Composer dans vos fichiers PHP pour accéder à la bibliothèque.
Après l’installation, vous devriez avoir un dossier vendor contenant Goutte ainsi qu’un fichier vendor/autoload.php. Ce fichier est essentiel pour charger automatiquement toutes les classes de Goutte et de ses dépendances.
Vérifier l’installation
Pour vous assurer que Goutte fonctionne correctement, créez un fichier test_goutte.php dans le dossier racine de votre projet et ajoutez le code suivant :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://crea-troyes.fr');
echo $crawler->filter('h1')->text();Ce petit script fait les actions suivantes :
- Il inclut l’autoloader de Composer pour charger Goutte.
- Il crée une instance du client Goutte.
- Il demande la page
https://www.example.com. - Il récupère le contenu du premier élément
<h1>de la page et l’affiche.
Si vous exécutez ce script avec la commande :
php test_goutte.phpVous devriez voir le texte du <h1> de la page exemple. Cela signifie que Goutte est correctement installé et fonctionnel sur votre machine. Vous pouvez également lancer ce script depuis votre navigateur si vous utilisez Mamp, Wamp ou tout autre serveur PHP local.
Cela devrait afficher : « Créa-Troyes Agence web »
Premiers tests avec Goutte
Maintenant que Goutte est installé, il est intéressant de réaliser quelques tests pour comprendre comment naviguer dans le HTML. Le composant DomCrawler permet de sélectionner des éléments avec des sélecteurs CSS, par exemple :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://www.example.com');
$titles = $crawler->filter('h2')->each(function ($node) {
return $node->text();
});
print_r($titles);Dans ce script :
filter('h2')permet de sélectionner tous les éléments<h2>de la page.each()applique une fonction à chaque élément trouvé, ici pour récupérer le texte.print_r()affiche le tableau des titres récupérés.
Vous pouvez ainsi expérimenter avec différents sélecteurs CSS pour cibler exactement les informations que vous souhaitez scraper, comme les prix, les descriptions ou les images d’un produit.
Créer un outil PHP pour scraper le prix d’un produit avec Goutte
Étape 1 : Préparer votre fichier PHP
Pour commencer, créez un fichier scraper_prix.php dans le dossier racine de votre projet. Ce fichier contiendra tout le code nécessaire pour récupérer le prix d’un produit sur une page web.
Tout d’abord, nous devons inclure l’autoloader de Composer et importer les classes nécessaires de Goutte :
<?php
require 'vendor/autoload.php';
use Goutte\Client;require 'vendor/autoload.php';: permet de charger automatiquement toutes les classes de Goutte et de ses dépendances.use Goutte\Client;: importe la classeClientqui sert à simuler un navigateur et à envoyer des requêtes HTTP.
Étape 2 : Créer une instance du client Goutte
Ensuite, nous allons créer un client Goutte qui nous permettra de charger des pages web :
$client = new Client();Cette simple ligne initialise un navigateur virtuel. Grâce à lui, nous pourrons envoyer des requêtes GET ou POST vers n’importe quelle page web, naviguer dans le contenu et récupérer les informations souhaitées.
Étape 3 : Charger la page du produit
Pour scraper le prix, il faut d’abord accéder à la page contenant le produit. Supposons que nous souhaitons récupérer le prix d’un produit sur https://formation.crea-troyes.fr/5-formation-wordpress.html.
$url = 'https://formation.crea-troyes.fr/5-formation-wordpress.html';
$crawler = $client->request('GET', $url);$urlcontient l’adresse de la page produit.$crawlerest un objet qui contient le contenu HTML de la page. Il nous permet de naviguer dans la structure de la page pour sélectionner les éléments que nous voulons.
Étape 4 : Identifier le sélecteur CSS du prix
Pour récupérer le prix, il faut connaître la structure HTML du site. Vous pouvez utiliser les outils de développement de votre navigateur (clic droit → Inspecter) pour repérer l’élément contenant le prix.

Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?Par exemple, le prix peut se trouver dans :
<span class="product-price">49,99 €</span>Ici, la classe CSS du prix est product-price. Nous pourrons donc utiliser ce sélecteur dans Goutte.
Dans notre exemple, en inspectant le code HTML de la page que nous scrapons, le prix est affiché sour la forme :
<data itemprop="price" content="299.00" class="p-price" value="299.00"> 299,00 <span itemprop="priceCurrency" content="EUR">€</span></data>Étape 5 : Extraire le prix avec Goutte
Maintenant que nous connaissons le sélecteur, nous pouvons récupérer le prix avec Goutte :
$prix = $crawler->filter('.p-price')->text();
echo "Le prix du produit est : " . $prix;Explications :
$crawler->filter('.p-price'): sélectionne tous les éléments ayant la classep-price.->text(): récupère le texte contenu dans cet élément, ici le prix.echo: affiche le prix récupéré à l’écran.
Si tout fonctionne correctement, vous verrez s’afficher :
Le prix du produit est : 299,00 €Étape 6 : Gérer les erreurs et l’absence de prix
Il est important de gérer les cas où le prix n’est pas trouvé ou si la page n’est pas accessible. Nous pouvons utiliser un bloc try/catch pour cela :
try {
$prix = $crawler->filter('.p-price')->text();
echo "Le prix du produit est : " . $prix;
} catch (\Exception $e) {
echo "Impossible de récupérer le prix. Erreur : " . $e->getMessage();
}Ainsi, votre script ne plantera pas si l’élément n’existe pas ou si le site a changé sa structure.
Étape 7 : Transformer le prix en nombre utilisable
Souvent, le prix est récupéré sous forme de texte avec le symbole monétaire. Pour pouvoir l’utiliser dans des calculs, il est utile de le convertir en nombre :
$prix_num = floatval(str_replace(['€', ' '], '', $prix));
echo "Prix numérique : " . $prix_num;str_replace(['€', ' '], '', $prix): supprime le symbole€et les espaces.floatval(): transforme le texte en nombre à virgule flottante.
Ainsi, 49,99 € devient 49.99, ce qui est pratique pour des comparaisons ou des alertes de prix.
Étape 8 : Ajouter une fonction pour réutiliser le scraper
Pour rendre le code plus propre et réutilisable, nous pouvons créer une fonction qui prend l’URL et le sélecteur du prix en paramètre :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
function getPrixProduit($url, $selector) {
$client = new Client();
$crawler = $client->request('GET', $url);
try {
$prix = $crawler->filter($selector)->text();
return floatval(str_replace(['€', ' '], '', $prix));
} catch (\Exception $e) {
return null;
}
}
// Utilisation
$url = 'https://formation.crea-troyes.fr/5-formation-wordpress.html';
$selector = '.p-price';
$prix = getPrixProduit($url, $selector);
if ($prix !== null) {
echo "Le prix du produit est : " . $prix . " €";
} else {
echo "Le prix n'a pas pu être récupéré.";
}Cette fonction vous permet de scraper rapidement plusieurs produits en appelant simplement getPrixProduit() avec l’URL et le sélecteur correspondant.
Étape 9 : Récupérer plusieurs informations d’un produit
Dans la plupart des projets, on ne souhaite pas seulement récupérer le prix, mais également d’autres informations comme le titre du produit, sa description ou son image. Avec Goutte, il est très simple d’extraire plusieurs données en utilisant plusieurs sélecteurs CSS :
function getInfosProduit($url) {
$client = new Client();
$crawler = $client->request('GET', $url);
try {
$titre = $crawler->filter('.p-name')->text();
$prix = $crawler->filter('.p-price')->text();
$description = $crawler->filter('.e-description')->text();
$image = $crawler->filter('.u-photo')->attr('src');
return [
'titre' => $titre,
'prix' => floatval(str_replace(['€', ' '], '', $prix)),
'description' => $description,
'image' => $image
];
} catch (\Exception $e) {
return null;
}
}
// Utilisation
$url = 'https://formation.crea-troyes.fr/5-formation-wordpress.html';
$infos = getInfosProduit($url);
if ($infos !== null) {
echo "Titre : " . $infos['titre'] . "<br>";
echo "Prix : " . $infos['prix'] . " €<br>";
echo "Description : " . $infos['description'] . "<br>";
echo "Image : " . $infos['image'] . "<br>";
} else {
echo "Impossible de récupérer les informations du produit.";
}
function getPrixProduit($url, $selector) {
$client = new Client();
$crawler = $client->request('GET', $url);
try {
$prix = $crawler->filter($selector)->text();
return floatval(str_replace(['€', ' '], '', $prix));
} catch (\Exception $e) {
return null;
}
}Explications :
filter()permet de cibler un élément précis grâce à un sélecteur CSS.text()récupère le texte, tandis queattr('src')récupère un attribut, ici l’URL de l’image.- Toutes les informations sont rassemblées dans un tableau associatif, pratique pour stocker ou afficher les données.
Étape 10 : Scraper plusieurs produits en boucle
Souvent, vous aurez besoin de récupérer les prix et infos pour plusieurs produits sur une même page ou sur plusieurs pages. Vous pouvez utiliser la méthode each() de DomCrawler :
$crawler = $client->request('GET', 'https://formation.crea-troyes.fr');
$produits = $crawler->filter('.single_formation')->each(function ($node) {
$titre = $node->filter('h2')->text();
$prix = $node->filter('span.font18')->text();
return [
'titre' => $titre,
'prix' => floatval(str_replace(['€', ' '], '', $prix))
];
});
print_r($produits);Dans ce code :
.single_formationsélectionne chaque bloc représentant un produit.each()applique une fonction à chaque bloc et retourne un tableau avec toutes les informations extraites.- Cela permet de récupérer rapidement une liste de produits avec leur prix.
Étape 11 : Gérer les sites plus complexes
Certains sites utilisent JavaScript pour charger le contenu, comme les prix ou les images. Goutte, étant basé sur PHP, ne peut pas exécuter le JavaScript.
Pour contourner cette limitation :
- Vérifiez si le site propose une API publique. Les données sont alors directement accessibles en JSON, ce qui est beaucoup plus fiable.
- Analysez les requêtes réseau dans l’onglet « Réseau » de votre navigateur pour repérer les fichiers JSON ou les appels AJAX qui contiennent les informations.
- Si aucune API n’est disponible et que le contenu est uniquement généré via JavaScript, vous devrez utiliser un outil comme Puppeteer ou Selenium, capables de simuler un vrai navigateur avec exécution JavaScript.
Étape 12 : Respecter les bonnes pratiques et éviter le blocage
Le scraping peut être détecté et bloqué par certains sites. Pour limiter ce risque :
- Ne surchargez pas le serveur : ajoutez un délai entre les requêtes avec
sleep(1)ou utilisezusleep()pour des pauses plus précises. - Modifiez l’User-Agent pour ressembler à un navigateur réel :
$client = new Client();
$client->setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');- Respectez le fichier robots.txt du site pour vérifier quelles pages peuvent être scrappées légalement.
- Ne copiez pas le contenu de façon massive ou pour des usages commerciaux sans autorisation, afin de respecter la législation sur les droits d’auteur.
Étape 13 : Stocker les données
Après avoir récupéré les prix et les informations, vous pouvez les stocker pour analyse :
- Dans un fichier CSV pour un usage simple :
$fp = fopen('produits.csv', 'w');
fputcsv($fp, ['Titre', 'Prix', 'Description', 'Image']);
foreach ($produits as $produit) {
fputcsv($fp, [$produit['titre'], $produit['prix'], $produit['description'], $produit['image']]);
}
fclose($fp);- Dans une base de données MySQL pour un usage plus avancé et durable.
Dans ce tutoriel complet, nous avons exploré en profondeur Goutte, un outil puissant pour le scraping en PHP. Nous avons commencé par définir ce qu’est Goutte, ses avantages, ses limites et le concept de « scraper ».
Ensuite, nous avons détaillé l’installation de Goutte sur votre environnement PHP avec Composer, la création d’un projet dédié et les premiers tests pour récupérer du contenu sur une page web. Nous avons appris à sélectionner des éléments HTML avec des sélecteurs CSS, à extraire du texte et des attributs, et à transformer ces informations pour les utiliser dans nos applications.
Nous avons ensuite conçu un outil PHP complet pour récupérer le prix d’un produit sur une page web. Ce script, simple mais robuste, permet d’extraire le prix, de gérer les erreurs et de convertir le texte en valeur numérique exploitable. Nous avons également montré comment créer une fonction réutilisable pour scraper plusieurs produits facilement.
Enfin, nous avons abordé des améliorations avancées : récupérer plusieurs informations par produit, scraper des listes de produits, gérer les sites complexes utilisant JavaScript, et respecter les bonnes pratiques pour éviter d’être bloqué. Nous avons aussi expliqué comment stocker les données dans un fichier CSV ou une base de données.
Conseils pour aller plus loin avec Goutte
Pour exploiter pleinement le potentiel de Goutte, voici quelques conseils pratiques :
- Automatiser le scraping : vous pouvez planifier votre script avec un cron job pour mettre à jour automatiquement les prix de vos produits à intervalles réguliers.
- Combiner avec d’autres outils PHP : associez Goutte à des bibliothèques comme PHPMailer pour envoyer des alertes de prix, ou PDO/MySQL pour stocker les données dans une base.
- Optimiser les performances : utilisez le caching des pages téléchargées si vous scrapez souvent les mêmes sites afin de réduire le nombre de requêtes HTTP.
- Surveiller les changements de site : les sites peuvent changer leur structure HTML. Intégrez des vérifications et logs pour détecter rapidement si vos sélecteurs CSS ne fonctionnent plus.
- Respecter la législation : vérifiez toujours les conditions d’utilisation des sites que vous scrapez et respectez les limites imposées par le fichier robots.txt.
Pourquoi Goutte est un excellent choix pour le scraping
Goutte combine simplicité, légèreté et puissance. Même sans connaissances avancées en PHP, vous pouvez créer un scraper fonctionnel en quelques lignes de code. Son intégration avec DomCrawler et BrowserKit permet de parcourir le HTML et d’extraire des informations de manière précise.
Bien que Goutte ne gère pas le JavaScript, ses fonctionnalités sont largement suffisantes pour de nombreux projets, notamment la surveillance de prix, la collecte de données produit, ou encore l’analyse de pages web statiques.
En suivant ce tutoriel, vous disposez désormais de toutes les clés pour utiliser Goutte efficacement et créer vos propres outils de scraping en PHP. Vous pouvez récupérer les prix et informations des produits, les stocker, les analyser et automatiser vos processus.
Goutte reste un outil accessible, performant et idéal pour les développeurs PHP souhaitant se lancer dans le scraping sans complexité inutile. Avec de la pratique, vous pourrez adapter vos scripts à différents sites, gérer des données plus complexes et construire de véritables outils professionnels de collecte d’informations sur le web.
N’oubliez pas que le scraping doit toujours être effectué dans le respect des sites et de la législation, et que Goutte vous offre une méthode simple, propre et rapide pour atteindre cet objectif.

