Вед-дев, Сео, Манимейкинг

Пишем парсер 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



Комментарии (2)

не работает ни чего ерунду написал

Покажи как писать не ерунду) Буду признателен.

Подписаться

Подписка на RSS-лента последние записи из Блога

Комменты

  • Olzhas 7 месяцев 1 неделя назад
    Спасибо. С Новым Годом! 
  • Den 8 месяцев 6 дней назад
    В первой функции, при создании переменной $li_previous нужно поменять '←' с NULL, в $li_next сделать тоже самое. 
  • Гость 8 месяцев 6 дней назад
    Если все ровно так как было описано, то нет никаких сомнений что домен увел сам регистратор. Потому что вероятность того 
  • Валерий 9 месяцев 5 дней назад
    да можно делать импорт-экспорт только лишь в оболочке на входя на mysql сервер 
  • admin 9 месяцев 6 дней назад
    Валерий, а зачем вам именно так делать экспорт? Если я не ошибаюсь, то там нет какой-либо команды чтобы сделать экспорт 
  • Валерий 9 месяцев 1 неделя назад
    захожу на mysql через ssh по команде  
  • admin 9 месяцев 1 неделя назад
    Добрый вечер, какой у вас клиент? 
  • Валерий 9 месяцев 1 неделя назад
    Здравстуйте, есть команда чтобы сделать экспорт базы внутри mysql клиента? 
  • Eduard 9 месяцев 3 недели назад
    Видать, домен хороший был. Заявление пробывали писать на мошенника? 
  • Stas 11 месяцев 5 дней назад
    Ошибка в ключе квантификатора - replace(/будешь|пить/ig, "хлеб"); Указать -g для прохода по всем совпадениям!