Основное преимущество 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 |
Селектор тега, |
-- |
Возвращает |
3(#)div[class='class1'] 3(#)div[id='2'] |
4 |
Селектор тега |
Атрибут, который |
Возвращает значение |
4(#)img[class='class1'](#)src |
5 |
Регулярное |
-- |
Работает с массивом, |
<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 |
Регулярное |
-- |
Работает с |
<p>значение тега</p><a>значение2</a> 10(#)/значение/si Итог: тега |
11 |
-- |
-- |
Очищающая теги от |
<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 16(#)значение1(#)значение2 Итог: значение2 |
17 |
-- |
-- |
Выполняет strip_tags |
<p class='class1'>значение1</p> <a>значение2</a> 17 Итог: |
19 |
-- |
-- |
Нормализует |
<p class=class1>значение1</p> <a>значение2</a> 19 Итог: <p class='class1'>значение1</p> <a>значение2</a>
|
21 |
-- |
-- |
Удаляет html комментарии |
|
Спасибо за внимание!