V1.0 - подробное описание ниже
V1.1 - добавлен метод getXpath, изменены принципы работы
Добавлен метод getXpath() - Он вернет DomXPath-объект
Теперь не нужно вызывать метод initDom(), он сам вызывается в кострукторе и сразу складывает в объект объекты класса DomDocument и DomXPath. Его можно вызвать и это не вызовет ошибку, но сделает 1 (возможно лишний) запрос к указанному url, и переинициирует объекты.
Все примеры ниже, уже будут описаны по версии V1.1
Данная библиотека немного облегчает задачу по парсингу простых текстов.
Чаще всего для парсинга нам требуется достаточно немного функций, для получения отдельных элементов со страницы.
Данная бибилиотека используется только для html, поскольку все функции написаны именно для этого формата данных.
Я ее сильно переделал от изначального варианта. Переделал методы и оставил только один файл с одним классом.
Добавлено в последний коммит:
- Добавлены функции получения аттрибутов поиска
- Переделана логика посикового запроса
- Поисковый запрос можно расширять с помощью метода AddPathQuery()
- Подключен логер с возможностью его включения, отключения и создания путей записи
- Добавлены проверки на ошибки
- Добавлен вывод подробных логов, в том числе с ошибками
Бибилиотека использует php-curl, php-domDocument, XPath
Для начала работы необходимо вызвать экземпляр основного класса
Grabber() и передать в качестве параметра строку с url. Не забудьте подключить пространство имен.
use classes\grabber\Grabber;
$geturl = new Grabber('http://site.com');
Данный кусочек вернет вам объект вызванного экземпляра класса.
После этого можно инициировать создание объекта класса Dom, или же просто получить html-содержимое
use classes\grabber\Grabber;
$parse = new Grabber('http://www.php.su/');
$dom = $parse->getDom(); //Вернет объект класса DOM, для дальнейшей работы
Просто получить содержимое в HTML
use classes\grabber\Grabber;
$parse = new Grabber('http://www.php.su/');
$html = $parse->getHTML(); //Вернет html-содержимое
Данный пример просто вернет HTML-страницы, которую вы указали при создании экземпляра класса. Что с ним делать? Решать вам!
Можно использовать свои библиотеки или иначе распорядиться содержимым.
Объект DomDocument инициирован, можно сделать посиковый запрос.
use classes\grabber\Grabber;
$parse = new Grabber('http://www.php.su/');
/*
*Данный запрос составляет поисковый запрос
*/
$xpath = $parse->PathQuery('p', 'class', 'phpsulogo');
PathQuery($tag, $selector, $value)
Данный метод составляет поисковый запрос содержимого DOM В качестве $tag необходимо передать html-тег (например: p); $selector - это обозначение атрибута тега (например: class); $value - значение селектора, (например: phpsulogo).
AddPathQuery($tag, $selector, $value)
Данный метод добавляет к методу PathQuery новые условия запроса В качестве $tag необходимо передать html-тег (например: p); $selector - это обозначение атрибута тега (например: class); $value - значение селектора, (например: phpsulogo).
Данный метод выполняет поисковый запрос образованный методами PathQuery
Теперь вам доступны следующие методы дальнейшей работы с ним:
- getValueOne() - возвращает первое совпадение выборки
- getValueArray() - возвращает массив выборки
- getHTMLOne() - возвращает HTML первого совпадения выборки
- getHTMLArray() - возвращает массив, содержащий html выборки
- getAttributeOne($attributename) - получение одного атрибута по названию
- getAttributeArray($attributename) - получение массива атрибутов по названию
<?php
spl_autoload_register(function ($class) {
$class = str_replace('\\', '/', $class) . '.php';
require_once($class);
});
use classes\grabber\Grabber;
$parse = new Grabber('http://php.net/', ['include'=>true]);
dump( $parse->PathQuery('a', 'class', 'brand')
->AddPathQuery('img')
->PathExec()
->getAttributeOne('src'));
Данный пример выведет:
www-data@web-server:~/html/grabber$ php index.php
string(26) "/images/logos/php-logo.svg"
www-data@web-server:~/html/grabber$
Такой же пример вы увидите в файле index.php + вспомогательные функции.
В ближайшее время планируется подключение логера для парсера, класс уже есть, нужно только динамично подключить с возможностью настройки.
Чтобы включить логер, необходимо при создании экземпляра класса отправить массив параметров:
- 'include' - по умолчанию false, нужно установить в true, чтобы включить логер
- 'logname' - название лога с расширением, по умолчанию 'work.log'
- 'log_dir' - путь к логам
Последним параметром советую не пользоваться, поскольку путь должен быть относительно расположения файла с классом Logger.
Логер будет писать подробный лог запроса
23.03.2017|12:46:24| ============Инициализация объекта Grabber============|
23.03.2017|12:46:24| Отправлен запрос на адрес http://php.net/|
23.03.2017|12:46:25| Запрос вернул HTML содержимое|
23.03.2017|12:46:25| Инициирован DOM объект|
23.03.2017|12:46:25| Составлен поисковый запрос: .//a[@class='brand']|
23.03.2017|12:46:25| К поисковому запросу добавлены дополнительные условия: /img|
23.03.2017|12:46:25| Общие поисковые условия: .//a[@class='brand']/img|
23.03.2017|12:46:25| Поисковый запрос выполнен и вернул объект с содержимым|
23.03.2017|12:46:25| Получен массив с атрибутами|
23.03.2017|12:46:25| ==================Работа завершена===================|