Парсинг PHP: Библиотека PHPQuery — PROG-TIME

Парсинг PHP: Библиотека PHPQuery

06.01.2019
Содержание:

В этой записи мы с вами рассмотрим библиотеку 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 — для поиска элементов в дереве DOM
html — возвращает строку. Получает 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

На этом всё!
Больше интересных статей в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime
Наши планы
  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube

Контакты для связи

Технология на prog-time
Telegram
https://t.me/prog_time_bot