Skip to content

Простой граббер для простых задач граббинга сайтов.

Notifications You must be signed in to change notification settings

dastanaron/grabber

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

История версий

V1.0 - подробное описание ниже

V1.1 - добавлен метод getXpath, изменены принципы работы

Описание V1.1

Добавлен метод getXpath() - Он вернет DomXPath-объект

Теперь не нужно вызывать метод initDom(), он сам вызывается в кострукторе и сразу складывает в объект объекты класса DomDocument и DomXPath. Его можно вызвать и это не вызовет ошибку, но сделает 1 (возможно лишний) запрос к указанному url, и переинициирует объекты.

Все примеры ниже, уже будут описаны по версии V1.1

Описание V1.0

Данная библиотека немного облегчает задачу по парсингу простых текстов.

Чаще всего для парсинга нам требуется достаточно немного функций, для получения отдельных элементов со страницы.

Данная бибилиотека используется только для html, поскольку все функции написаны именно для этого формата данных.

Я ее сильно переделал от изначального варианта. Переделал методы и оставил только один файл с одним классом.

Добавлено в последний коммит:

  1. Добавлены функции получения аттрибутов поиска
  2. Переделана логика посикового запроса
  3. Поисковый запрос можно расширять с помощью метода AddPathQuery()
  4. Подключен логер с возможностью его включения, отключения и создания путей записи
  5. Добавлены проверки на ошибки
  6. Добавлен вывод подробных логов, в том числе с ошибками

Зависисмости

Бибилиотека использует 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()

PathQuery($tag, $selector, $value)

Данный метод составляет поисковый запрос содержимого DOM В качестве $tag необходимо передать html-тег (например: p); $selector - это обозначение атрибута тега (например: class); $value - значение селектора, (например: phpsulogo).

Метод AddPathQuery()

AddPathQuery($tag, $selector, $value)

Данный метод добавляет к методу PathQuery новые условия запроса В качестве $tag необходимо передать html-тег (например: p); $selector - это обозначение атрибута тега (например: class); $value - значение селектора, (например: phpsulogo).

Метод PathExec()

Данный метод выполняет поисковый запрос образованный методами PathQuery

Теперь вам доступны следующие методы дальнейшей работы с ним:

  1. getValueOne() - возвращает первое совпадение выборки
  2. getValueArray() - возвращает массив выборки
  3. getHTMLOne() - возвращает HTML первого совпадения выборки
  4. getHTMLArray() - возвращает массив, содержащий html выборки
  5. getAttributeOne($attributename) - получение одного атрибута по названию
  6. 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 + вспомогательные функции.

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

Настройки логера

Чтобы включить логер, необходимо при создании экземпляра класса отправить массив параметров:

  1. 'include' - по умолчанию false, нужно установить в true, чтобы включить логер
  2. 'logname' - название лога с расширением, по умолчанию 'work.log'
  3. '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| ==================Работа завершена===================|

About

Простой граббер для простых задач граббинга сайтов.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages