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

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 11 березня, 2026
Spatie/crawler 9 додає CrawlResponse, покращений контроль області обходу, тестові хелпери та гнучку обробку подій. Хочете дізнатися, як ефективно кроулити сайти з обмеженням швидкості, автоматичними повторними спробами та рендерингом JavaScript?

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

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

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

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();

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

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

Популярні

Logomark Logotype

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

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

Logomark Logotype

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

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

Logomark Logotype

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

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