PHP-пакет для паралельного сканування сайтів

Перекладено ШІ 2 Laravel News 02 червня, 2026

Spatie/crawler 9 додає CrawlResponse, покращений контроль області обходу, тестові хелпери та гнучку обробку подій. Хочете дізнатися, як ефективно кроулити сайти з обмеженням швидкості, автоматичними повторними спробами та рендерингом JavaScript?

spatie/crawler — PHP-пакет від Freek Van der Herten для паралельного обходу сайтів із використанням Guzzle promises. Нещодавно оновлено до версії 9: додано новий CrawlResponse об'єкт, покращено контроль області обходу, інструменти для тестування та інше.

Ключові можливості:

  • Обробка подій обходу через closure callbacks та observer classes
  • CrawlResponse — об'єкт з typed accessors
  • Збір URL і контроль області обходу
  • Тестування за допомогою fake()
  • Та інше...

# Обробка подій обходу

Crawler підтримує два підходи до обробки подій обходу: closure callbacks та observer classes. Підхід із closure callbacks виглядає так:

use Spatie\Crawler\Crawler;
use Spatie\Crawler\CrawlResponse;
 
Crawler::create('https://example.com')
    ->onCrawled(function (string $url, CrawlResponse $response) {
        echo "{$url}: {$response->status()}\n";
    })
    ->start();

Обробники onFailed() і onFinished() працюють за тією ж схемою для помилок і логіки після обходу. Є також onWillCrawl(), який викликається перед обходом URL.

# CrawlResponse

Кожен обхідний URL повертає CrawlResponse — об'єкт з typed accessors для типових перевірок:

Crawler::create('https://example.com')
    ->onCrawled(function (string $url, CrawlResponse $response) {
        if ($response->wasRedirected()) {
            echo "Redirected from: " . implode(' → ', $response->redirectHistory()) . "\n";
        }
 
        $dom = $response->dom(); // Symfony DomCrawler instance
    })
    ->start();

Об'єкт також надає body(), header() та transferStats() для даних про час виконання.

# Збір URL і контроль області обходу

Crawler дозволяє контролювати область обходу та збирати URL без обходу кожного посилання. Це корисно, якщо потрібно отримати посилання зі сторінки — наприклад, лише внутрішні — і повернути їх без подальшої обробки:

$urls = Crawler::create('https://example.com')
    ->internalOnly()
    ->depth(3)
    ->foundUrls();

# Тестування з fake()

Spatie традиційно додає зручні помічники для тестування, і пакет crawler не виняток. Метод fake() дозволяє перевіряти логіку обходу без реальних HTTP-запитів. Передайте мапу URL-ів до HTML-рядків — і краулер використає їх як відповіді:

Crawler::create('https://example.com')
    ->fake([
        'https://example.com' => '<html><a href="/about">About</a></html>',
        'https://example.com/about' => '<html>About page</html>',
    ])
    ->foundUrls();

# Інші важливі моменти

  • Throttling: FixedDelayThrottle — фіксована затримка між запитами; AdaptiveThrottle — автоматичне уповільнення залежно від часу відповіді сервера
  • retry(): автоматичні повторні спроби при помилках з'єднання та 5xx-відповідях
  • stream(): опціональний стримінг для зменшення використання пам'яті під час великих обхідних операцій
  • FinishReason enum: start() повертає Completed, CrawlLimitReached, TimeLimitReached або Interrupted
  • JavaScript rendering: інтерфейс JavaScriptRenderer з включеним CloudflareRenderer і spatie/browsershot як рекомендований драйвер
  • Та інше

Повний код — на GitHub: spatie/crawler.

Популярні

Інше, що варто прочитати

15 Оновлено 01 червня, 2026

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті

74 Оновлено 01 червня, 2026

Laravel Boost — ваш стартовий набір для програмування з використанням штучного інтелекту

Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel

18 Оновлено 01 червня, 2026

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю