Перейти к содержимому
Меню
Светлый путь
  • Главная
  • Документация
    • Php
    • Linux
    • Windows
    • Bitrix
    • WordPress
    • Полезное
  • Бесплатный хостинг
    • Российский бесплатный хостинг
    • Зарубежный бесплатный хостинг
Светлый путь

Использование библиотеки phpQuery в PHP

Опубликовано 8 декабря, 20228 декабря, 2022

Удобная библиотека если нужно вытащить какой ни будь часть HTML кода с сайта нам поможет специальная библиотека, позволяющие упростить разбор HTML. Их представителем является phpQuery.

Библиотека phpQuery аналог jQuery, с которой многие хорошо знакомы. Вместо того, чтобы писать сложные регулярки для получения блоков сайта, с помощью phpQuery мы сможем обращаться к ним с помощью селекторов CSS.

Данная библиотека представляет собой класс и для того, чтобы понять работу с нею, нужно хоть немного представлять что такое ООП.

Начало работы с phpQuery

Официальная документация (англ.) находится по ссылке http://code.google.com/archive/p/phpquery/ или можете скачать у на с сайта. Зайдите туда, скачайте эту библиотеку, положите в папку со своим проектом и подключите ее вот так:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';
?>

Примеры работы с phpQuery

Работа с phpQuery происходит подобно jQuery. Впрочем, даже не зная jQuery вам будет легко разобраться.

Итак, начало работы с библиотекой начинается с phpQuery::newDocument($str), где переменная $str — это HTML код для разбора. В результате вернется объект, к которому мы сможем применять определенные методы:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div>Теги</div>';
	$pq = phpQuery::newDocument($sttag);
?>

Итак, в переменной $pq лежит объект. У этого объекта есть метод find, который параметром принимает CSS селектор, а делает следующее: ищет внутри HTML кода из $pq элементы подпадающие под этот селектор. Пример:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div>Теги</div>';
	$pq = phpQuery::newDocument($sttag );

	$elem = $pq->find('a');
?>

Сейчас в переменной $elem лежит объект с найденным a ( ссылка ) У этого объекта есть метод html, который выводит параметры ссылки найденного элемента:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div>Теги</div>';
	$pq = phpQuery::newDocument($sttag);

	$elem = $pq->find('#elem');
	$text = $elem->html();
	echo $text;
?>

Получение атрибутов

Кроме содержимого тегов, можно также получать содержимое атрибутов. Можно получить 2 способами. Это делает метод attr, параметром принимающий название атрибута. Давайте получим содержимое href ссылки:

  1. Способ:
<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div>Теги</div>';
	$html = phpQuery::newDocument($sttag );
	$pq = pq($html);

	$elem = $pq->find('a');
	$href = $elem->attr('href');
	echo $href;
?>

2. Способ: Сокращается код на одну строчку

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div>Теги</div>';
	$html = phpQuery::newDocument($sttag);
	$pq = pq($html);
	$href = $pq->find('a')->attr('href');
	echo $href;
?>

Работа с набором элементов

Предположим, что мы хотим получить не один элемент по его id, а несколько. Давайте попробуем сделать так:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag  = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div class="titan"><a href="https://sv-pt.ru">Сылка 2</a></div><div>Теги</div>';
	$pq = phpQuery::newDocument($sttag);
	$links = $pq->find('a');
	$text = $links->html();
	echo $href;
?>

В результате мы увидим строку Сылка и Сылка 2 — содержимое двух ссылок слитое в одну строку. Врятли мы хотели получить именно это — нам наверняка хотелось бы иметь массив текстов ссылок и массив их href.

В данном случае переменная $links — объект, состоящий из набора других объектов. Такие объекты можно перебирать циклом foreach — и это будет работать. Вот так:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag  = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div class="titan"><a href="https://sv-pt.ru">Сылка 2</a></div><div>Теги</div>';
	$pq = phpQuery::newDocument($sttag );

	$links = $pq->find('a');

	foreach ($links as $link) {

	}
?>

Внутри цикла переменная $link будет объектом, однако не объектом phpQuery, а объектом DOM. Это значит, что к $link не применимы методы phpQuery (в частности find и html). Чтобы сделать из него объект phpQuery, его следует обернуть в функцию pq (аналог доллара в jQuery).

Давайте сделаем это и заодно накопим тексты ссылок и их href в отдельные массивы:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag  = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div class="titan"><a href="https://sv-pt.ru">Сылка 2</a></div><div>Теги</div>';
	$pq = phpQuery::newDocument($sttag );

	$links = $pq->find('a');

	foreach ($links as $link) {

		$pqLink = pq($link); //pq делает объект phpQuery

		$text[] = $pqLink->html();
		$href[] = $pqLink->attr('href');
	}

        echo($text);
	echo($href);
?>

Удаление

С помощью phpQuery можно удалять по селектору мешающие вам элементы. Это делается с помощью метода remove. Смотрите пример:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag  = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div class="titan"><a href="https://sv-pt.ru">Сылка 2</a></div><div>Теги</div>';
	$pq = phpQuery::newDocument($sttag );

	$elem = $pq->remove('div.titan);
	$text = $pq->html();
	echo $text;
?>

В результате остается только блок <div>Текст</div>, а блок <div class=»titan»> с вложением удаляется.

Оборачивание

Можно также оборачивать элементы с помощью метода wrap. Смотрите пример:

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag  = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div class="titan"></div><span id="wrap">Теги</span>';
	$pq = phpQuery::newDocument($sttag );

	$wrap = $pq->find('#wrap')->wrap('<div>');
	$text = $pq->html();
	echo $text;
?>

В результате ссылка обернется в див и станет выглядеть так: <div><span id=»wrap»>Ссылка</span></div>.

Оборачивание внутрь

<?php
	require_once 'phpQuery/phpQuery/phpQuery.php';

	$sttag  = '<div class="titan"><a href="https://sv-pt.ru">Сылка</a></div><div class="titan"></div><span id="wrap">Теги</span>';
	$pq = phpQuery::newDocument($sttag );

	$wrap = $pq->find('#wrap')->wrapInner('<b>');
	$text = $pq->html();
	echo $text;
?>

Свежие записи

  • Настройка Wazuh 4.11 в качестве SIEM на CentOS 9
  • infinityfree.com
  • Создание API токена Zabbix 7.2.5
  • Установка и настройка Elasticsearch + kibana + logstash + filebeat 8.17 на CentOS9
  • Установка и настройка Fail2ban на старые машины Centos 7,8

Свежие комментарии

  • Vag-Key.ru к записи Подключения к MySQL через ODBC connector для 1С.
  • Offensive strategies к записи 0fees.net
  • tenisi к записи Capcha PHP

Архивы

  • Май 2025
  • Апрель 2025
  • Март 2025
  • Октябрь 2024
  • Сентябрь 2024
  • Август 2024
  • Апрель 2024
  • Март 2024
  • Январь 2024
  • Декабрь 2023
  • Октябрь 2023
  • Сентябрь 2023
  • Август 2023
  • Март 2023
  • Январь 2023
  • Декабрь 2022
  • Сентябрь 2022
  • Август 2022
  • Июль 2022
  • Июнь 2022
  • Май 2022
  • Июль 2021
  • Июнь 2021
  • Февраль 2021
  • Октябрь 2020
  • Сентябрь 2020
  • Август 2020
  • Июль 2020

Рубрики

  • Bitrix
  • htaccess
  • Linux
  • Mysql
  • Php
  • SEO
  • Windows
  • WordPress
  • Zabbix
  • Бесплатный хостинг
  • Веб Сервер
  • Виртуальные машины
  • Главная
  • Документация
  • Зарубежный бесплатный хостинг
  • Книги
  • Полезное
  • Российский бесплатный хостинг

Мета

  • Войти
  • Лента записей
  • Лента комментариев
  • WordPress.org

Search

Свежие записи

  • Настройка Wazuh 4.11 в качестве SIEM на CentOS 9
  • infinityfree.com
  • Создание API токена Zabbix 7.2.5
  • Установка и настройка Elasticsearch + kibana + logstash + filebeat 8.17 на CentOS9
  • Установка и настройка Fail2ban на старые машины Centos 7,8

Свежие комментарии

  • Vag-Key.ru к записи Подключения к MySQL через ODBC connector для 1С.
  • Offensive strategies к записи 0fees.net
  • tenisi к записи Capcha PHP

Архивы

  • Май 2025
  • Апрель 2025
  • Март 2025
  • Октябрь 2024
  • Сентябрь 2024
  • Август 2024
  • Апрель 2024
  • Март 2024
  • Январь 2024
  • Декабрь 2023
  • Октябрь 2023
  • Сентябрь 2023
  • Август 2023
  • Март 2023
  • Январь 2023
  • Декабрь 2022
  • Сентябрь 2022
  • Август 2022
  • Июль 2022
  • Июнь 2022
  • Май 2022
  • Июль 2021
  • Июнь 2021
  • Февраль 2021
  • Октябрь 2020
  • Сентябрь 2020
  • Август 2020
  • Июль 2020

Рубрики

  • Bitrix
  • htaccess
  • Linux
  • Mysql
  • Php
  • SEO
  • Windows
  • WordPress
  • Zabbix
  • Бесплатный хостинг
  • Веб Сервер
  • Виртуальные машины
  • Главная
  • Документация
  • Зарубежный бесплатный хостинг
  • Книги
  • Полезное
  • Российский бесплатный хостинг

Мета

  • Войти
  • Лента записей
  • Лента комментариев
  • WordPress.org

Тизер

cod

©2025 Светлый путь | На платформе SuperbThemes
Яндекс.Метрика
Этот веб-сайт использует файлы cookie. Продолжая здесь, вы соглашаетесь на использование файлов cookie.