Пишем парсер PHP

Очень часто люди ищут в гугле такие запросы как "Пишем парсер PHP", "Простой парсер на PHP" и т.д.

Парсер необходим для таких задач как копирование чужого контента и его последующего отображения на своем сайте.

Сегодня мы рассмотрим работу простейшего парсера на PHP при помощи функции file_get_contents(). Подопытным нашего примера станет блог программиста - xandeadx.ru -> Будем граббить заголовки с ссылками из его главной страницы :)

Итак, поехали!

Открываем сайт xandeadx.ru, открываем исходный код страницы, либо через Firebug (Или другие аналоги, если вы не пользуетесь Firefox)

На изображении видно что все заголовки находятся в теге <h2 class="title">, и еще один момент, у него помимо самих заголовков в <h2> находится еще и ссылка на термин таксономии -> она нам не нужна - с ненужными вещами разберемся при помощи регулярных выражений.

Теперь начинаем писать небольшой и простой код:

$file = file_get_contents('http://xandeadx.ru');
// Вся страница сайта находится в переменной $file
// можете сделать print_r($file); и увидете весь сайт :)

$pattern = "/^<h2 class=\"title\">\s→\s(.*)<\/h2>/i";
preg_match_all($pattern, $file, $matches);
// делаем print_r($matches); и тут вы увидите массив с заголовками.
// print implode('<br />', $matches[1]);

В итоге у вас будут обычные ссылки на материалы с его главной страницы, типа:
<a href="/blog/drupal/blablabla">blablabla</a>

При помощи preg_replace() можно добавить необходимые атрибуты или данные в ссылки, например:

preg_replace('/^<a\s+(href=")(\/blog\/\/drupal\/)/i', '<a rel="nofollow" target="_blank" $1http://xandedx.ru$2', $matches[1][0]);
// Итог будет такой
// <a rel="nofollow" target="_blank" href="http://xandeadx.ru/blog/drupal/blabla">blabla</a>

Примечания

() - Означают группировку
$1, $2 и т.п - означают backreference, т.е. обратную ссылку с regexp

  • Categories: