spatie/crawler — PHP-пакет від Freek Van der Herten для паралельного обходу сайтів із використанням Guzzle promises. Нещодавно оновлено до версії 9: додано новий CrawlResponse об'єкт, покращено контроль області обходу, інструменти для тестування та інше.
Ключові можливості:
CrawlResponse — об'єкт з typed accessorsfake()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.
Кожен обхідний 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() для даних про час виконання.
Crawler дозволяє контролювати область обходу та збирати URL без обходу кожного посилання. Це корисно, якщо потрібно отримати посилання зі сторінки — наприклад, лише внутрішні — і повернути їх без подальшої обробки:
$urls = Crawler::create('https://example.com')
->internalOnly()
->depth(3)
->foundUrls();
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();
FixedDelayThrottle — фіксована затримка між запитами; AdaptiveThrottle — автоматичне уповільнення залежно від часу відповіді сервераretry(): автоматичні повторні спроби при помилках з'єднання та 5xx-відповідяхstream(): опціональний стримінг для зменшення використання пам'яті під час великих обхідних операційFinishReason enum: start() повертає Completed, CrawlLimitReached, TimeLimitReached або InterruptedJavaScriptRenderer з включеним CloudflareRenderer і spatie/browsershot як рекомендований драйверПовний код — на GitHub: spatie/crawler.
Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті
Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel
Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю