Метод паука с отсевом в PHP
При парсинге сайта методом паука наш парсер обойдет все страницы сайта. Однако, не все страницы являются целевыми. Нам нужно проводить отсев страниц, которые мы хотим распарсить и сохранить себе в базу.
Давайте вспомним место, где мы что-то делаем с текстом страницы:
<?php
var_dump($text); // делаем что-то с текстом
?>
В этом месте мы и будем отсеивать лишние страницы. При этом как правило ссылки мы будем собирать со всех страниц (иначе можно куда-то не попасть на сайте), а сохранять в базу будем только целевые страницы, которые нам нужны. Итак, давайте посмотрим, как мы можем отсеивать страницы.
Первый и самый надежный способ применим,
если URL целевых страниц имеет отличие
от нецелевых. К примеру, у сайта из предыдущего
урока целевые страницы имели расширение
.html
, а нецелевые - нет.
В этом случае мы можем нацелить
нашу проверку на это:
<?php
if (!preg_match('#\.html$#', $path)) {
var_dump($text);
}
?>
Второй способ применим, если целевые
страницы имеют характерное отличие
в верстке. Это может быть id
,
некий специфичный CSS класс или наличие
какого-нибудь тега. Пример:
<?php
if (preg_match('#<main id="content">#', $text)) {
var_dump($text);
}
?>
Третий способ применим, когда целевые страницы имеют некую характерную особенность текста. Например, вот так:
<?php
if (preg_match('#<title>страница \d+</title>#', $text)) {
var_dump($text);
}
?>
Изучите сайт code.mu. Расскажите, по каким особенностям можно отделить страницы статей от страниц с оглавлениями.
Изучите сайты в интернете. Напишите пять сайтов, в которых по разным признакам можно отделить страницы с контентом от других страниц.