? Voici les possibilités qui s'offrent à vous :","Crunchbase","A propos de nous","Merci à tous pour votre formidable soutien !","Liens rapides","Programme d'affiliation","Prime","ProxyScrape essai premium","Vérificateur de procuration en ligne","Types de mandataires","Pays mandataires","Cas d'utilisation du proxy","Important","Politique en matière de cookies","Clause de non-responsabilité","Politique de confidentialité","Conditions d'utilisation","Médias sociaux","Facebook","LinkedIn","Twitter","Quora","Télégramme","Discord","\n Copyright 2025 - Thib BV | Brugstraat 18 | 2812 Mechelen | Belgium | VAT BE 0749 716 760\n"]}
Le web scraping est devenu un outil essentiel pour les développeurs et les analystes de données qui ont besoin d'extraire et d'analyser des informations du web. Qu'il s'agisse de suivre les prix des produits, de collecter des données à des fins de recherche ou de créer un tableau de bord personnalisé, le web scraping offre des possibilités infinies.
Si vous êtes un passionné de PHP, Goutte est une bibliothèque fantastique à considérer pour vos besoins en web scraping. Goutte est légère, conviviale et puissante, combinant les capacités du client HTTP Guzzle avec le DomCrawler de Symfony pour un scraping web fluide et efficace.
Ce guide vous présente les bases du web scraping en PHP avec Goutte - de l'installation et de votre premier script aux techniques avancées comme la gestion des formulaires et la pagination.
Goutte a gagné en popularité parmi les développeurs pour un certain nombre de raisons, ce qui en fait l'une des bibliothèques de scraping les plus utilisées en PHP :
Que vous soyez novice en PHP ou développeur chevronné, Goutte trouve un équilibre idéal entre simplicité et puissance.
Avant de se lancer dans le codage, il faut s'assurer que les conditions préalables nécessaires sont réunies :
Pour installer Goutte, il suffit de lancer la commande suivante dans votre terminal :
composer require fabpot/goutte
Une fois installée, vérifiez que la bibliothèque est accessible en exigeant l'autoloader de Composer dans votre projet :
requiert 'vendor/autoload.php';
Vous pouvez maintenant commencer à gratter !
Commençons par un exemple simple. Nous allons récupérer le titre d'une page web en utilisant Goutte. Voici le script de base :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
// Initialize Goutte Client
$client = new Client();
// Send a GET request to the target URL
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract the title of the page
$title = $crawler->filter('title')->text();
echo "Page Title: $title\n";
// Extract the titles of the first 5 books
echo "First 5 Book Titles:\n";
$crawler->filter('.product_pod h3 a')->slice(0, 5)->each(function ($node) {
echo "- " . $node->attr('title') . "\n";
});
?>
Sortie :
Titre de la page: Tous les produits | Livres à gratter - Bac à sable
5 premiers titres de livres:
- Une lumière dans le grenier
- Une lumière dans le grenier
- Soumission
- Sharp Objects
- Sapiens : Une brève histoire de l'humanité
C'est aussi simple que cela ! Avec seulement quelques lignes de code, vous pouvez récupérer et afficher les données du titre
de n'importe quelle page web.
Une fois que vous avez appris à récupérer une page web, l'étape suivante consiste à extraire des données spécifiques telles que des liens ou du contenu à partir d'éléments HTML spécifiques.
Le script suivant permet d'extraire le href
les attributs de tous les <a>
sur une page web :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
return $node->attr('href');
});
// Print all extracted links
foreach ($links as $link) {
echo $link . "\n";
}
Cela renverra tous les liens hypertextes présents sur la page.
Goutte facilite l'extraction ou l'analyse de données à partir de HTML à l'aide de classe
ou ID
sélecteurs. Pour cet exemple, nous utiliserons le sélecteur Livres pour le site web Scrape. Plus précisément, nous allons récupérer des informations sur chaque livre, étant donné qu'ils partagent tous la même classe, produit_pod
. Voici comment il apparaît sur le site web :
Voici un exemple de la manière dont vous pouvez y parvenir en utilisant la Goutte :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Extract all <a> tags
$links = $crawler->filter('a')->each(function ($node) {
return $node->attr('href');
});
// Print all extracted links
foreach ($links as $link) {
echo $link . "\n";
}
// Extract elements with class 'product_pod'
$products = $crawler->filter('.product_pod')->each(function ($node) {
return $node->text();
});
// Print all extracted product details
foreach ($products as $product) {
echo $product . "\n";
}
Voyons maintenant comment naviguer ou paginer entre les pages. Dans la page d'exemple que nous utilisons, il y a un bouton "Suivant" qui permet de passer à la page suivante. Nous allons exploiter ce bouton pour mettre en œuvre la pagination.
Tout d'abord, nous allons localiser le bouton à l'aide de sa fonction classe
qui a pour valeur suivant
. Dans cet élément, il y a un <a>
contenant l'URL de la page suivante. En extrayant cette URL, nous pouvons l'utiliser pour envoyer une nouvelle requête et passer de manière transparente à la page suivante.Voici l'apparence et la structure HTML de la balise suivant
sur la page.
Voici à quoi ressemble le code qui permet d'atteindre cet objectif :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://books.toscrape.com/');
// Handle pagination using the 'next' button
while ($crawler->filter('li.next a')->count() > 0) {
$nextLink = $crawler->filter('li.next a')->attr('href');
$crawler = $client->request('GET', 'https://books.toscrape.com/catalogue/' . $nextLink);
// Extract and print the current page URL
echo "Currently on: " . $crawler->getUri() . "\n";
}
Cette approche vous permet d'automatiser la navigation entre les pages et de continuer à collecter des données.
Goutte est également capable de gérer des formulaires. Pour démontrer cette fonctionnalité, nous allons utiliser ce site web, qui comporte un seul champ de saisie, comme le montre l'image ci-dessous :
Voici à quoi ressemble le code de soumission de ce formulaire :
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'https://www.scrapethissite.com/pages/forms/');
// Submit the search form with a query
$form = $crawler->selectButton('Search')->form();
$form['q'] = 'Canada';
$crawler = $client->submit($form);
// Extract and print the results
$results = $crawler->filter('.team')->each(function ($node) {
return $node->text();
});
foreach ($results as $result) {
echo $result . "\n";
}
Ce script remplit un champ de formulaire nommé q
avec la valeur scraping web
et la soumet. À partir de là, vous pouvez extraire le contenu de la page de résultats de la recherche, comme dans les exemples précédents.
Ajoutez toujours une gestion des erreurs pour gérer les situations inattendues telles qu'une connexion réseau défaillante ou des URL inexistantes.
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
try {
$crawler = $client->request('GET', 'https://invalid-url-example.com');
echo "Page title: " . $crawler->filter('title')->text();
} catch (Exception $e) {
echo "An error occurred: " . $e->getMessage();
}
}
Le "web scraping" doit toujours être pratiqué de manière éthique et responsable. Le fichier `robots .txt` est un simple fichier texte utilisé par les sites web pour communiquer avec les robots d'indexation, indiquant quelles parties du site peuvent ou ne peuvent pas être consultées. Avant de procéder au scraping, il est important de vérifier le fichier `robots.txt` pour s'assurer que vous suivez les règles du site et que vous respectez ses conditions. Ignorer ces directives peut entraîner des problèmes juridiques et éthiques, c'est pourquoi vous devez toujours faire de cette étape une priorité dans votre processus de scraping.
En savoir plus robots.txt
ici.
Soyez courtois et évitez d'envoyer trop de demandes dans un court laps de temps, car cela peut submerger le serveur et perturber ses performances pour les autres utilisateurs. Une bonne pratique consiste à prévoir un court délai entre chaque requête afin de minimiser la charge du serveur et de s'assurer qu'il peut gérer le trafic de manière efficace. En prenant ces mesures, vous contribuez non seulement à maintenir la stabilité du serveur, mais vous faites également preuve d'une utilisation responsable et réfléchie des ressources partagées.
sleep(1) ; // Attendez 1 seconde entre les requêtes
Le web scraping est un outil puissant pour collecter des données de manière efficace, mais il nécessite une approche responsable et réfléchie afin d'éviter les pièges les plus courants et de garantir une utilisation éthique. En adhérant aux meilleures pratiques, telles que le respect des conditions d'utilisation des sites web, la mise en place de délais appropriés entre les requêtes et l'utilisation d'outils capables de gérer des contenus dynamiques, vous pouvez créer un scraper efficace tout en minimisant l'impact sur les serveurs. En outre, la vérification des certificats HTTPS et la prise en compte des considérations de sécurité protégeront votre scraper et toutes les données qu'il recueille. Avec une planification et une exécution appropriées, le web scraping peut devenir une ressource inestimable pour la recherche, l'analyse et l'innovation.