Pull to refresh

Библиотека для парсинга parserSites

Hi! Примерно 2 года назад я столкнулся с задачей парсинга большого количества сайтов. Предстояло хранить настройки в БД(MySQL). Классическими методами и библиотеками было неудобно по различным причинам (неповоротливость, слишком много кода для получения конечного результата и прочее) и поэтому решил написать свою библиотеку на php parserSites.

Основное преимущество parserSites – с помощью одного доступного метода вы можете добраться до нужного блока, обработать его как захотите и вывести в переменную. Для меня это был выход из ситуации.

Библиотека состоит из:

1) Методов для настройки cUrl
2) Методов для обработки данных

Методы для настройки cUrl:

$parserSites = new parserSites();
// установка прокси
$parserSites->setProxy('39.86.1.77:8998');
// передача параметров для авторизации прокси
$parserSites->setProxyAuth('HJerg34GIL:8sdvfer080');
// установка рефера
$parserSites->setReferer('http://www.google.com');
// передача POST параметров
$parserSites->setPostData($post);
// заголовки браузера
$parserSites->setBrowser($browser);
// http заголовки
$parserSites->setHttpHeader($arrayHeaders);
// путь куда сохранять cookie
$parserSites->setPathCookies($path);
// если есть cookie и нужно их передать
$parserSites->setCookies($cookie);
// url страницы, которую парсим
$parserSites->setUrl('http://www.yandex.ru/');

//Обязательные только:
$parserSites->setUrl($url);
$html = $parserSites->curl();


Методы для обработки данных

Для примера приведу страницу с содержанием:

<html>
<body>
<div class='one'>
	<p>Номер мобильного телефона 89258324835</p>
	<a href='http://vk.com/12323'>Ссылка на персональную страницу</a>
</div>
</body>
</html>

В переменную нужно получить '+79258324835', а также ссылку на персональную страницу. Как это сделать с помощью библиотеки?


$parsingSites = new  parsingSites();
$parserSites->setUrl($url);
$html = $parserSites->curl();
$parserSites->getData($html);

$phone = $parsingSites->lego('3(#)div.one|#|8(#)/[0-9]+/|#|9(#)/^8/(#)+7');
$personalUrl = $parsingSites->lego('4(#)a(#)href');

Пояснение

Метод lego получает входные данные и цепочку методов с параметрами, которые обрабатывают данные шаг за шагом. То есть последующий метод работает с результатом предыдущего.

|#| — разделение методов

метод1(#)параметр1|#| метод2(#)параметр1|#| метод3(#)параметр1(#)параметр2
Таблица методов с их параметрами.

Метод


Параметр1


Параметр2


Описание


Примеры


3


Селектор тега,
возможен формат tag[attr='value'][attrN='valueN']


--


Возвращает
содержимое тега


3(#)div[class='class1']


3(#)div[id='2']
3(#)[class='class1'][id='2']


4


Селектор тега


Атрибут, который
необходимо получить


Возвращает значение
атрибута


4(#)img[class='class1'](#)src


5


Регулярное
выражения


--


Работает с массивом,
который формируется с помощью метода 15. Возвращает значение после
указанного. Очень удобный метод, много раз выручал.


<p>значение1</p><a>значение2</a>


5(#)/значение1/si


Итог: значение2


8


Регулярное
выражения


--


Возвращает
значение, которое соответствует регулярному выражению


<p>зачение1</p><a>значение2</a>


8(#)/[а-я]+/si


Итог: значение


9


Регулярное
выражение


На что заменить.
Необязательный параметр. Если не указывать заменит на пустоту


Заменяет по
регулярному выражению входящую строку и возвращает значение.


<p>значение1</p><a>значение2</a>


9(#)/[0-9]+/si(#)Number


Итог: <p>значение Number </p><a>значение Number </a>


 


10


Регулярное
выражение


--


Работает с
массивом, который формируется с помощью метода 15. Возвращает значение
первого найденного тега.


<p>значение тега</p><a>значение2</a>


10(#)/значение/si


Итог: тега


11


--


--


Очищающая теги от
атрибутов


<p
class='class1'>значение1</p>


<a>значение2</a>


11


Итог: <p>значение1</p>


<a>значение2</a>


 


13


Число


Арифметический знак


Выполняет математическую
операцию


<p>значение1</p>


8(#)/[0-9]+/|#|13(#)2(#)+


Итог: 3


 


14


Селектор тега


--


Проверяет наличие
тега в искомом, в случае неудачи обнуляет результат


<p class='one']>значение1</p>


<a>значение2</a>


 


14(#)p[class='one']


Итог: <p class='one']>значение1</p>


<a>значение2</a>


 


14(#)p[class='two']


Итог: пустота


 


15


--


--


Разбивает строку на
массив со значениями между тегов


<p class='one']>значение1</p>


<a>значение2</a>


 


15


Итог: array('значение1',' значение2')


16


Строка


Строка


IF ELSE
если параметр 1 равен 'val' то 'val2'


значение1


16(#)значение1(#)значение2


Итог: значение2


17


--


--


Выполняет strip_tags


<p class='class1'>значение1</p>


<a>значение2</a>


17


Итог:
значение1значение2


19


--


--


Нормализует
атрибуты — добавляет кавычки


<p class=class1>значение1</p>


<a>значение2</a>


19


Итог: <p class='class1'>значение1</p>


<a>значение2</a>


 


21


--


--


Удаляет html комментарии


 



Спасибо за внимание!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings