PHP Manual

Завантаження всього сайту за посиланнями на PHP

06. 11. 2019

Obsah článku

Відносно часто я вирішую завдання завантаження всіх сторінок в межах одного сайту або домену, оскільки потім виконую з результатами різні вимірювання, або використовую сторінки для повнотекстового пошуку.

Одним з можливих рішень є використання готового інструменту [Xenu] (http://home.snafu.de/tilman/xenulink.html), який дуже складно встановити на веб-сервер (це Windows-програма), або [Wget] (https://www.gnu.org/software/wget/), який не скрізь підтримується і створює ще одну непотрібну залежність.

Якщо стоїть завдання просто зробити копію сторінки для подальшого перегляду, то дуже корисною є програма HTTrack, яка мені найбільше подобається, тільки при індексуванні параметризованих URL можна втратити точність в деяких випадках.

Тому я почав шукати інструмент, який може автоматично індексувати всі сторінки безпосередньо в PHP з розширеною конфігурацією. Згодом він став проектом з відкритим вихідним кодом.

Baraja WebCrawler

Саме для цих потреб я реалізував власний пакет Composer [WebCrawler] (https://github.com/baraja-core/webcrawler), який елегантно справляється з процесом індексації сторінок самостійно, а якщо мені трапляється новий випадок, то я його ще більше вдосконалюю.

Встановлюється за допомогою команди Composer:

composer require baraja-core/webcrawler

І він простий у використанні. Достатньо створити екземпляр і викликати метод crawl():

$crawler = new \Baraja\WebCrawler\Crawler;
$result = $crawler->crawl('https://example.com');

У змінній $result буде доступний повний результат у вигляді екземпляру сутності CrawledResult, яку рекомендую вивчити, оскільки вона містить багато цікавої інформації про весь сайт.

Налаштування гусеничного ходу

Часто нам доводиться якось обмежувати завантаження сторінок, тому що інакше ми, напевно, завантажили б весь Інтернет.

Для цього використовується сутність Config, якій передається конфігурація у вигляді масиву (ключ-значення) і далі передається конструктором в Crawler.

Наприклад:

$crawler = new \Baraja\WebCrawler\Crawler(
new \Baraja\WebCrawler\Config([
// ключ => значення
])
);

Налаштування параметрів:

Ключ Значення за замовчуванням Можливі значення
followExternalLinks false Bool: Залишатися тільки в межах одного домену? Чи може він також індексувати зовнішні посилання?
sleepBetweenRequests 1000 Int: Час очікування між завантаженням кожної сторінки в мілісекундах.
maxHttpRequests 1000000 Int: Скільки максимально завантажених URL-адрес?
maxCrawlTimeInSeconds 30 Int: Скільки триває максимальне завантаження в секундах?
allowedUrls ['.+'] String[]: Масив дозволених форматів URL у вигляді регулярних виразів.
forbiddenUrls [''] String[]: Масив заборонених форматів URL у вигляді регулярних виразів.

Регулярний вираз повинен точно відповідати всій URL-адресі у вигляді рядка.

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
Status:
All systems normal.
2024