Меню
Светлый путь
  • Главная
  • Документация
    • Php
    • Linux
    • Windows
    • Bitrix
    • WordPress
    • Полезное
  • Бесплатный хостинг
    • Российский бесплатный хостинг
    • Зарубежный бесплатный хостинг
  • Книги
    • Администрирование
      • Windows
      • Linux
      • Cisco
      • Other
    • Программирование
      • Delphi
      • Python
      • PHP
      • Assembler
      • Kotlin
    • Хакинг
    • Вирусы
    • SEO
  • Журналы
    • Хакер Спец
Светлый путь

Использование библиотеки 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;
?>

Search

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

  • Использование фильтра plugin_row_meta WordPress
  • Cron отключаем отправку писем при выполнении заданий
  • Использование библиотеки phpQuery в PHP
  • MariaDB/MySQL: general_log – логгирование всех запросов
  • Ошибка Mysql 1142. Got error: 1142.

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

    Архивы

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

    Рубрики

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

    Мета

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

    Тизер

    cod

    ©2023 Светлый путь | sinicha.ru | animesound.sinicha.ru | hentaij.ru
    Яндекс.Метрика