Метод паука на массиве для парсинга сайтов в PHP
Описанный в предыдущем уроке поэтапный метод достаточно неудобный и это неудобство растет при увеличении количества подкатегорий. Существует альтернативный метод, который называется методом паука (en. crawler).
Суть этого метода в следующем. Парсер заходит на главную страницу сайта, берет оттуда все ссылки и сохраняет их себе. Затем берет первую сохраненную ссылку, заходит на нее, сохраняет себе текст страницы, а также достает все ссылки с этой страницы и добавляет себе в список те ссылки, которых там еще нет.
Таким образом получается универсальный парсер, который может спарсить любой сайт, независимо от структуры его категорий.
Реализуем описанный алгоритм:
<?php
$paths = [
'http://targ.loc/',
];
$i = 0;
while ($i < count($paths)) {
$path = $paths[$i];
$text = getPage($path);
$hrefs = getHrefs($text);
foreach ($hrefs as $href) {
if (!in_array($href, $paths)) {
$paths[] = $href;
}
}
var_dump($text); // делаем что-то с текстом
$i++;
}
var_dump($paths);
?>
Скачайте сайт по ссылке targ1.zip
и разверните его у себя. Напишите парсер,
который спарсит все страницы сайта и получит
содержимое тегов title
и main
.
Модифицируйте предыдущую задачу так, чтобы тайтлы и тексты страниц сохранялись в базу данных.
Расскажите, какие преимущества и недостатки вы видите в поэтапном методе и в методе паука.