Le web scraping avec Laravel combine la puissance du framework PHP et des bibliothèques spécialisées pour automatiser l’extraction de données.
C’est une solution robuste pour collecter, traiter et organiser des informations en ligne. Découvrons ensemble dans cet article comment faire du web scraping avec Laravel.

Prérequis pour faire du scraping avec Laravel
Laravel est un framework PHP largement utilisé pour développer des applications web modernes.
Grâce à son écosystème riche, il offre un environnement idéal pour mettre en place du web scraping avec PHP de manière organisée et maintenable. Pour commencer, il est important de :
- 🔥 Maîtriser les bases de PHP et de Laravel.
- 🔥 Comprendre HTML et CSS pour cibler les éléments.
- 🔥 Savoir manipuler Composer pour installer des paquets.
👉 Les outils essentiels sont :
- Goutte : la bibliothèque PHP de référence. Elle simplifie les requêtes et l’extraction de données.
- Puppeteer/Headless Chrome : un navigateur sans tête. Indispensable pour scraper les pages qui utilisent beaucoup de JavaScript.
- HTTP Client de Laravel : permet de faire des requêtes avec
Http::get()pour récupérer du contenu simple.
Tutoriel pour créer son premier scraper avec Laravel
Suivez ce tutoriel pas à pas pour créer un scraper fonctionnel avec Laravel.
⚠ Respectez toujours les conditions d’utilisation des sites, le robots.txt et la législation locale. Limitez la charge (rate-limit), identifiez un User-Agent et ne collectez pas de données sensibles.
Étape 1 : Installation et configuration
Créez un nouveau projet Laravel et ajoutez Goutte (intégration Laravel).
# 1) Créer un nouveau projet Laravel
composer create-project laravel/laravel scraper-demo
cd scraper-demo
# 2) Ajouter Goutte (intégration Laravel)
composer require weidner/goutte
Étape 2 : Créer une commande artisanale
Générez une commande qui contiendra votre logique de scraping :
php artisan make:command ScrapeData
Le fichier est créé ici : app/Console/Commands/ScrapeData.php.
Étape 3 : Écrire le code du scraper
Dans la commande générée, ajoutez :
- ✅ Une requête HTTP pour récupérer le contenu HTML.
- ✅ Des sélecteurs CSS pour cibler les données.
- ✅ Une boucle pour parcourir les éléments et afficher les résultats.
Voici un exemple de code complet pour scraper les titres d’articles d’un blog :
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Weidner\Goutte\GoutteFacade as Goutte;
use Symfony\Component\DomCrawler\Crawler;
class ScrapeData extends Command
{
protected $signature = 'scrape:data';
protected $description = 'Scraper simple des titres d\'articles';
public function handle(): int
{
$url = 'https://example.com/blog'; // URL du blog à scraper
$this->info("Scraping: {$url}");
// 1) Requête HTTP pour récupérer le HTML
$crawler = Goutte::request('GET', $url);
// 2) Utilisation de sélecteurs CSS
$nodes = $crawler->filter('h2 a');
// 3) Boucle sur les éléments et affichage
$nodes->each(function (Crawler $node, $i) {
$title = $node->text();
$link = $node->attr('href');
$this->line(($i+1) . ". " . $title . " - " . $link);
});
return self::SUCCESS;
}
}
Bonnes pratiques pour le web scraping avec Laravel
Pour faire du web scraping efficacement avec Laravel, voici quelques conseils à prendre en compte :
1. Gestion des tâches et de la mise en file d’attente
Le scraping peut prendre plusieurs secondes par page. Imaginez si vous devez scraper 1000 pages, votre application Laravel serait bloquée et inutilisable pendant un bon moment. La solution : les jobs et les queues de Laravel.
- Un job, c’est une tâche que vous voulez exécuter en arrière-plan.
- Une queue (file d’attente), c’est l’endroit où on range ces jobs pour qu’ils soient exécutés petit à petit, sans bloquer le reste.
👉 Voici un exemple de code pour encapsuler la logique de scraping dans un Job :
// app/Jobs/ScrapePageJob.php
<?php
namespace App\Jobs;
use Goutte\Client; // Ou Guzzle/Http, selon ta stack
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ScrapePageJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected string $url;
public function __construct(string $url)
{
$this->url = $url;
}
public function handle(): void
{
$client = new Client();
$crawler = $client->request('GET', $this->url);
// Exemple simple : extraire tous les <h1>
$titles = $crawler->filter('h1')->each(function ($node) {
return $node->text();
});
// Persistance / logs / events...
foreach ($titles as $title) {
\Log::info("[Scraping] {$this->url} - H1: {$title}");
}
}
}
// app/Http/Controllers/ScraperController.php
<?php
namespace App\Http\Controllers;
use App\Jobs\ScrapePageJob;
class ScraperController extends Controller
{
public function start()
{
$urls = [
'https://example.com/page1',
'https://example.com/page2',
'https://example.com/page3',
];
foreach ($urls as $url) {
ScrapePageJob::dispatch($url); // file d'attente par défaut
// ScrapePageJob::dispatch($url)->onQueue('scraping'); // si tu veux une queue dédiée
}
return response()->json(['status' => 'Scraping lancé en arrière-plan 🚀']);
}
}
👉 Comme vous avez vu, les jobs vont dans une queue (file d’attente). Laravel propose plusieurs systèmes pour gérer cette file. Les plus utilisées sont :
- La file d’attente avec la base de données : les jobs sont stockés comme des lignes dans une table SQL, puis exécutés un par un par un worker.
- La file d’attente avec Redis : les jobs sont placés en mémoire dans une file ultra-rapide, idéale pour traiter un gros volume de tâches.
2. Automatisation avec le planificateur de tâches de Laravel
Laravel intègre un planificateur de tâche (scheduler) qui permet d’automatiser les scrapers.
Vous pouvez ainsi planifier l’exécution d’une commande de scraping à des intervalles réguliers, par exemple toutes les heures.
👉 Voici comment l’exécuter dans app/Console/Kernel.php :
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* Planifie les commandes artisan.
*/
protected function schedule(Schedule $schedule): void
{
// Toutes les heures
$schedule->command('scraper:run')->hourly();
// Exemples utiles :
// $schedule->command('scraper:run')->everyFifteenMinutes();
// $schedule->command('scraper:run')->dailyAt('02:30')->timezone('Indian/Antananarivo');
}
/**
* Enregistrement des commandes.
*/
protected function commands(): void
{
$this->load(__DIR__ . '/Commands');
}
}
3. Contourner les protections anti-scraping
Beaucoup de sites mettent en place des protections contre les scrapers. Pour éviter d’être bloqué, il est mieux de :
- ✅ Changer l’User-Agent : simulez un vrai navigateur.
- ✅ Gérer les délais : insérez des pauses (sleep, throttle) entre les requêtes pour ne pas surcharger le serveur cible.
- ✅ Utiliser des proxys : répartissez les requêtes sur plusieurs adresses IP.
Quelles sont les alternatives au web scraping avec Laravel ?
Même si Laravel est pratique pour intégrer le scraping dans une application PHP, il existe d’autres solutions souvent plus spécialisées.
Python est le langage le plus utilisé pour le scraping. Il dispose de bibliothèques puissantes comme Scrapy et BeautifulSoup.
- Les outils sans code
De plus en plus d’outils permettent de faire du scraping sans coder ou avec l’aide de l’IA. On cite : Bright Data, Octoparse, Apify, etc.

FAQ
Comment scraper un site web protégé par un login avec Laravel ?
C’est l’un des défis les plus courants en web scraping. Pour y parvenir avec Laravel, il faut :
- Simuler la connexion avec une requête POST en envoyant l’email et le mot de passe.
- Gérer les cookies ou la session pour accéder aux pages protégées.
Comment gérer la pagination lors du web scraping avec Laravel ?
Pour gérer la navigation d’une page à l’autre avec Laravel, vous devez :
- Scraper la première page.
- Détecter le lien “page suivante” avec un sélecteur CSS.
- Boucler sur chaque lien jusqu’à la fin de la pagination.
Comment exporter les données scrapées (vers CSV, Excel, ou JSON) ?
Avec Laravel, vous pouvez utiliser :
fputcsv()pour le CSV.- la librairie
Maatwebsite\Excelpour Excel. - La fonction native
json_encode()pour générer un fichier JSON.
Comment gérer les erreurs et les exceptions pendant le scraping ?
Pour gérer les requêtes qui échouent avec Laravel, il faut :
- Encapsuler les requêtes dans un
try/catch. - Vérifier les codes d’état HTTP (404, 500, etc.). En cas d’erreur, les logger ou programmer un nouvel essai.
Le web scraping est-il légal ou illégal ?
La légalité du web scraping est un sujet complexe. Tout dépend du site ciblé et de l’usage des données.
📌 Le web scraping en France est souvent discuté dans le cadre du droit d’auteur et de la protection des bases de données.
💬 En bref, le web scraping avec Laravel est puissant et flexible, mais demande de bonnes pratiques pour rester efficace et légal. Dites-nous ce que vous en pensez dans les commentaires.





