При работе с веб-приложениями, порой, возникает необходимость использовать материалы с строрнних веб-ресурсов. Это может быть персонализированная «читалка» для какого – либо популярного ресурса, или приложение для сайта.
С помощью PHP можно относительно просто извлечь код из сторонней веб-страницы и манипулировать с ним. Данный способ логично использовать, если у вас небольшой объем работы, и данные необходимо получить с постороннего домена. Чтобы извлечь информацию из страницы со своего домена, логичнее использовать XMLHttpRequest API.
Предложенный способ извлекать данные из веб ресурсов явно не самый быстрый, требует строгий формат кода, но наиболее простой в реализации, так как не требует каких – либо дополнительных библиотек и фреймворков.

Итак, для начала нужно загрузить содержимое веб-страницы, в нашем случае habrahabr.ru/top, в переменную.
$url = file_get_contents('https://habrahabr.ru/top/');

Теперь нужно проанализировать ее с помощью функции preg_match и регулярных выражений.
Функция preg_match возвращает массив найденных фрагментов кода, каждый фрагмент будет представлен двумя экземплярами: часть строки, соответствующая вхождению всего шаблона и часть строки, соответствующая подмаске.
preg_match_all('/<div class="post__header">(.*?)<\/div>/is', $url, $resul, 0);

Рассмотрим подробнее регулярные выражения:
image
Регулярных выражений еще много, со всеми можно ознакомиться в официальной документации.
Следующая конструкция выведет массив с содержимым контейнера с id=”post__header”.
print_r($resul);


Можно заменить весь текст на странице звездочками.
Используем функцию preg_replace, которая заменяет фрагменты текста, соответствующие набору регулярных выражений, на определенный набор символов.
$url = file_get_contents('https://habrahabr.ru/top/');
$str = preg_replace('/[A-z]/', "***",$url);
print_r($str);

Можно передать полученное значение в JavaScript, сделать это можно известным способом.
var content = "<?php echo $str; ?>";

Главное, чтобы переменная $str не содержала «кавычек», иначе ситуация выйдет из-под контроля.
Функция str_replace заменяет строку поиска на строку замены, удаляем с ее помощью кавычки.
$str = str_replace(' " ', ' ', '$string');

Объединив предложенные методы, можно создать приложение, которое будет обеспечивать дополнительный функционал для любого веб-ресурса. Для создания серьезных проектов можно использовать
Html Agility Pack для .NET Framework.
Поделиться с друзьями
-->

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


  1. ragimovich
    29.06.2016 20:03

    Какая познавательная статья. Прямо-таки «bleeding edge» парсинга на PHP.


  1. MetaDone
    29.06.2016 20:05

    парсить регулярками — наверно это уже прошлый век. существуют няшные библиотеки типа http://simplehtmldom.sourceforge.net/manual.htm с css-подобным синтаксисом, что гораздо проще в обращении. даже http://php.net/manual/ru/class.domxpath.php будет кошернее и доставит меньше проблем если верстка источника изменится. Даже с невалидной версткой уже огребете кучу проблем.
    От вашего способа больше вреда, чем потенциальной пользы