VasilStarl
04:40 11-07-2020добрый день
Всем привет. Сегодня я вам расскажу о замечательной библиотеке phpQuery которая позволяет работать со строкой html как с dom деревом. Сразу скажу что это сторонняя библиотека, то есть она не встроена в стандартные модули php, ее нужно отдельно скачивать и подключать. Кстати вот она
здесьПреимущество данной библиотеки в том что она интуитивно понятна, так как сделана по аналогу известной библиотеки jquery для javascript. Всем названия методов и свойств для работы с dom деревом позаимствованы именно у нее(jquery). Поэтому если кто знаком с javascript и jquery, им не составит особого труда быстро освоить работу с данной библиотекой. Ну да ладно, поехали!
Первое что необходимо сделать, так подключить саму библиотеку:
require_once('phpQuery.php');
Затем для дальнейшей работы нам понадобится html код, возьмем его с главной страницы моего блога через функцию file_get_contents():
$html = file_get_contents('https://webfanat.com');
На выходе мы получаем html строку и записываем ее в переменную html. И теперь для того чтобы работать с данной строкой как с dom деревом необходимо создать объект phpQuery.
$dom = phpQuery::newDocument($html)
Здесь мы у класса phpQuery вызываем статический метод которому передаем нашу html строку и на выходе получаем объект phpQuery записанный в переменную dom.
Все теперь мы можем работать с dom деревом.
Для того чтобы выбрать какой либо элемент на странице достаточно воспользоваться методом find():
echo $dom->find('h1')->text();
Здесь мы вывели заголовок h1 с главной страницы моего блога. Заметьте мы воспользовались двумя методами find() и text().
find() - данный метод осуществляет выборку по переданному селектору элемента.
text() - выводит текст элемента
К примеру если мы хотим вывести содержащийся html код в элементе классом slide-bar нам достаточно прописать следующее:
echo $dom->find('.slide-bar')->html();
И нам выведется содержимое элемента с классом slide-bar. Однако заметьте что нам вывелся не сам html код, а содержащиеся элементы. Для того чтобы все таки мы получили html код, необходимо экранировать специальные символы.
echo htmlspecialchars($dom->find('.slide-bar')->html());
Для этого можно воспользоваться функцией htmlspecialchars().
При выборке мы можем пользоваться любыми псевдоселекторами которые поддерживает jquery.
echo $dom->find('a[class="color_red"]');
Здесь мы получим все элементы 'a' содержащие класс color_red. Если мы хотим посчитать их количество достаточно воспользоваться свойство length.
echo $dom->find('a[class="color_red"]')->length;
В итоге нам выведется количество ссылок с классом color_red.
Исходя из этого мы можем элементы ссылок перебрать и обработать:
$allA = $dom->find('a[class="color_red"]');
$i=1;
foreach ($allA as $el) {
$a =pq($el);
$a->attr('title', 'Cсылка '.$i);
$i++;
}
echo $dom->find('a[class="color_red"]');
Здесь мы каждой ссылке с классом color_red присвоили атрибут title в качестве значения которого указали порядковый номер ссылки. Функция pq() в phpQuery это аналог функции $ в jquery.
В общем о возможностях данной библиотеки можно рассказывать еще очень много она также поддерживает методы append(), prepend(), remove(), addClass и т. д., по аналогу методов jquery.
Подробную документацию о данной библиотеке вы можете поискать на этом
ресурсе.А на этом данная статья подошла к концу. Если остались вопросы пишите их в комментариях или группе
вк.Ну а я с вами прощаюсь. Желаю вам удачи и успехов! Пока.
Внимание!!! Комментарий теперь перед публикацией проходит модерацию
добрый день