Відносно часто я вирішую завдання завантаження всіх сторінок в межах одного сайту або домену, оскільки потім виконую з результатами різні вимірювання, або використовую сторінки для повнотекстового пошуку.
Одним з можливих рішень є використання готового інструменту [Xenu] (http://home.snafu.de/tilman/xenulink.html), який дуже складно встановити на веб-сервер (це Windows-програма), або [Wget] (https://www.gnu.org/software/wget/), який не скрізь підтримується і створює ще одну непотрібну залежність.
Якщо стоїть завдання просто зробити копію сторінки для подальшого перегляду, то дуже корисною є програма HTTrack, яка мені найбільше подобається, тільки при індексуванні параметризованих URL можна втратити точність в деяких випадках.
Тому я почав шукати інструмент, який може автоматично індексувати всі сторінки безпосередньо в PHP з розширеною конфігурацією. Згодом він став проектом з відкритим вихідним кодом.
Саме для цих потреб я реалізував власний пакет 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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | uk