В этой записи мы с вами рассмотрим библиотеку PHPQuery, с помощью которой вы сможете делать подробную выборку из строки без использования регулярных выражений.
Где скачать?!
Скачать библиотеку можно с официального сайта — https://code.google.com/archive/p/phpquery/downloads
Скачиваете последнюю версию и добавляете файлы в свой проект. После этого вам нужно подключить библиотеку к вашему проекту, для этого прописываем request
и путь к файлу phpQuery/phpQuery/phpQuery.php
request 'phpQuery/phpQuery/phpQuery.php';
Основы работы с библиотекой PHPQuery
Тот кто раньше работал с библиотекой jQuery, без труда сможет разобраться с phpQuery.
Мы будем использовать phpQuery в связке с CURL.
Прописываем базовый код для CURL и записываем результат в переменную(в моем случае это $result
).
$curl = curl_init(); //инициализация
curl_setopt($curl, CURLOPT_URL, $url); //передаем наш URL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //для записи результата в переменную
$result = curl_exec($curl); //запрос
После, прописываем $pq = phpQuery::
newDocument
($result);
, здесь создается объект в котором находится весь код страницы и в этом объекте мы будем искать нужный нам элемент. Далее прописываем код поиска элементов.
Элемент можно найти на тегу элемента, классу элемента или идентификатору элемента.
По тегу — $elem = $pq->find('тег');
По идентификатору — $elem = $pq->find('#имя_идентификатора');
По классу — $elem = $pq->find('.имя_класса');
Для примера я буду искать контейнер в коде главной страницы на моем сайте в котором находится название сайта. Класс site-title
.

$pq = phpQuery::newDocument($result);
$elem = $pq->find('.site-title');//ищем элемент с классом site-title
Далее прописываем код, который заберёт HTML код из найденного элемента.
$text = $elem->html();//выводим html код из полученного элемента
Полный код запроса выглядит так:
require_once 'phpquery-master/phpQuery/phpQuery.php';//подключаем библиотеку
$url = 'http://prog-time.ru';//ссылка на сайт
$curl = curl_init();//инициализация
curl_setopt($curl, CURLOPT_URL, $url);//передаем наш URL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//для записи результата в переменную
$result = curl_exec($curl);//запрос
$pq = phpQuery::newDocument($result);
$elem = $pq->find('.site-title');//ищем элемент с классом site-title
$text = $elem->html();//выводим html код из полученного элемента
var_dump($text);//выводим
Методы для выборки:
find
— для поиска элементов в дереве DOMhtml
— возвращает строку. Получает HTML-содержимое первого элемента в наборе.text
— получает текст выбранного элемента в наборе. Если таких элементов несколько, получит содержимое всех элементов, разделенные пробелом
Обычно для выборки используют только несколько методов, но phpQuery позволяет использовать все методы аналогичные jQuery.
Со всеми методами phpQuery вы можете ознакомиться здесь — https://code.google.com/archive/p/phpquery/wikis/Manipulation.wiki
Как использовать phpQuery на PHP 8 и выше
В PHP 8 было добавлено много изменений и многие старые библиотеки и плагины без поддержки стали выдать ошибки. Библиотека phpQuery перестала поддерживаться с 2009 года, но меня это абсолютно не пугает, так как данная библиотека очень простая и я могу поддерживать её самостоятельно.
Для работы с phpQuery на версиях выше 8 версии необходимо внести следующие изменения.
Необходимо на строчках 2156, 2171, 2178, 2180, 2181 фигурные скобки заменить на квадратные.

Исправленную версию библиотеки вы можете скачать по этой ссылки
https://disk.yandex.ru/d/SVuUt5YkyjyqBQ