Аналог JQuery на PHP
Для работы с объектами DOM HTML на PHP есть очень удобная библиотека phpQuery - это аналог JQuery, с точно таким же синтаксисом. Скачать phpQuery version 0.9.5, с этой версией работал я.
Принцип работы
По началу, конечно, не привычно работать с этой библиотекой, но когда понимаешь, насколько библиотека повторяет JQuery, плюс можно пользоваться всей мощью php - становишься просто счастлив.
Синтаксис JQuery: $(ОБЪЕКТ).КОМАНДА
Синтаксис phpQuery: pq(ОБЪЕКТ)->КОМАНДА
Таким образом, все отличие заключается в использовании функции pq вместо $, ну и к командам нужно обращаться через -> а не точку(.).
Пример
Задача: нужно получить курсы валют некого банка. Курсы возможно брать с сайта банка. Т.е. нужно распарсить страницу. Код страницы:
<html>
<body>
<p>Курсы валют</p>
<table>
<tr><td>Валюта</td><td>Курс</td></tr>
<tr><td>EUR</td><td>40</td></tr>
<tr><td>USD</td><td>30</td></tr>
<tr><td>UAN</td><td>20</td></tr>
</table>
</body>
</html>
Решение:
include $_SERVER['DOCUMENT_ROOT'].'phpQuery.php';
$pageText = file_get_contents($path);
//Создаем корневой объект phpQuery
//$document = phpQuery::newDocumentHTML($pageText,'UTF8');//С указание кодировки
$document = phpQuery::newDocumentHTML($pageText); //Без указания кодировки
$arTr = pq($document)->find('tr:gt(0)');//Получаем все строки, начиная со второй
$res = array();
foreach ($arTr as $tr){//цикл по строкам
$currency = pq($tr)->find('td:eq(0)')->html();//берем название валюты
//из первой ячейки
$res[$currency] = pq($tr)->find('td:eq(1)')->html(); //курс из второй
}
Получили:
Array
(
[EUR] => 40
[USD] => 30
[UAN] => 20
)
Обращаю внимание на одну странность. Создавать корневой объект phpQuery можно как с указанием кодировки ($document = phpQuery::newDocumentHTML($pageText,'UTF8');), так и без ($document = phpQuery::newDocumentHTML($pageText);). В каких то случаях, если не указать кодировку - получим казюбрики вместо кириллицы. А иногда, наоборот, указываешь правильную кодировку - получаешь казюбрики, а не указываешь кодировку - все нормально. Я с причинами не разбирался, просто определял опытным путем где указывать кодировку, а где нет.
Еще пример
Также, с помощью данной библиотеки можно менять HTML содержимое. Возьмем HTML код из предыдущего примера, и добавим класс первой строке таблицы:
pq($document)->find('tr:eq(0)')->addClass('table-head');
echo pq($document)->html();
Получим:
<html>
<body>
<p>Курсы валют</p>
<table>
<tr class="table-head"><td>Валюта</td><td>Курс</td></tr>
<tr><td>EUR</td><td>40</td></tr>
<tr><td>USD</td><td>30</td></tr>
<tr><td>UAN</td><td>20</td></tr>
</table>
</body>
</html>
В примерах используются JQuery селекторы :eq() и :gt() подробнее о них и других селекторах можно прочитать здесь.
Комментарии:
Максим
12.10.2013 16:12:12
Radoslav
23.03.2015 18:39:20
1 - кодировка исходной страницы (документ в котором будет идти поиск)
2 - кодировка сервера.
3 - кодировка скрипта
Кодировка скрипта желательно должна совпадать с кодировкой сервера. Это становится единым параметром к которому надо приводить получаемый для работы документ
Оставить комментарий: