Що таке парсер (граббер)? - приклади PHP-парсеров
- Приклад використання cURL для PHP-граббера
- PHP-парсер значення з рядка
- XML-парсер на PHP
- HTML-парсер на PHP
Давайте розберемося, що таке парсер або граббер в програмуванні. Що собою являє процес парсинга на прикладах створення PHP-граббер. Як бонус - готові парсери RSS-стрічки і отримання тематичної частини статей з їх demo-сайтами.
Парсер (від англ. Parser) або граббер (від англ. Grabber) - програмне забезпечення, призначене для аналізу і розбору вихідних даних, з метою їх обробки і подальшої використання в необхідному вигляді.
Походження терміна «граббер» тісно пов'язане з парсером, але має на увазі вилучення даних з джерела для цього не призначеного, т. Е. Ми буквально «грабуємо» дані джерела для їх використання в особистих цілях.
Сам же процес парсинга (англ. Parsing) або скраппінга (англ. Skrapping) зазвичай має на увазі виявлення унікальних ознак або закономірностей вживання даного нас фрагмента даних, з метою побудови відповідних правил їх «виділення» і «захоплення» у вихідних даних.
Приклад використання cURL для PHP-граббера
Окремо варто відзначити, що для роботи граббера часто використовується імітація браузера (наприклад, імітувати User Agent) з метою приховування процесу граббінг і обходу захисту від граббінг.
приклад використання cURL в PHP:
$ Ch = curl_init (); curl_setopt_array ($ ch, array (CURLOPT_URL => $ url, CURLOPT_USERAGENT => 'Mozilla / 5.0 (Windows NT 6.1; rv: 8.0) Gecko / 20100101 Firefox / 8.0', CURLOPT_AUTOREFERER => true, // імітація передачі реферера при редирект CURLOPT_ENCODING => "", // підтримка декодіровнія результату: identity, deflate і gzip CURLOPT_HEADER => false, // відключення заголовків з виведення CURLOPT_RETURNTRANSFER => true, // результат в curl_exec () CURLOPT_CONNECTTIMEOUT => 60, / / обмеження часу з'єднання CURLOPT_TIMEOUT => 60, // обмеження часу виконання cURL функції CURLOPT_FOLLOWLOCATION => true, // слідувати по редирект CURLOPT_MAXREDIRS => 5, // максимальна к-ть редиректів CURLOPT_SSL_VERIFYPEER => false, // відключення перевірки сертифіката вузла CURLO PT_SSL_VERIFYHOST => false, // відключення перевірки сертифіката хоста)); $ Content = curl_exec ($ ch); $ Errno = curl_errno ($ ch); $ Error = curl_error ($ ch); $ Info = curl_getinfo ($ ch); curl_close ($ ch);
PHP-парсер значення з рядка
Наприклад, з рядка: не май 100 рублів, а май 100 друзів - необхідно отримати кількість рублів. Унікальними ознаками тут можуть служити цілочисельне значення і ідентифікатор грошової одиниці «рублів».
Парсинг значення з рядка
Найпростіше правило парсинга на основі регулярного виразу в PHP інтерпретації матиме вигляд:
$ str = 'не май 100 рублів, а май 100 друзів'; if (preg_match_all ( " '(\ d +) \ s * рублей'iu", $ str, $ matches)) {echo' <pre> '; var_dump ($ matches); echo '</ pre>'; }
Результат роботи цього PHP-парсера матиме вигляд:
array (2) {[0] => array (1) {[0] => string (16) "100 рублів"} [1] => array (1) {[0] => string (3) "100 "}}
Розглянемо регулярний вираз: '(\ d +) \ s * рублей'iu - детальніше:
- сам вираз «обгорнуті» одинарними лапками з метою використання модифікаторів: i - ігнорувати регістр і u - використовується UTF-кодування;
- круглі дужки - подмаскі, з вкладеним правилом, яка повертається як друге значення масиву $ matches [1];
- \ D - спецсимвол для позначення символу від 0 до 9;
- + - квантіфікатор для позначення одного або більше символів;
- \ S - спецсимвол для позначення пробілу символу (пробіл, табуляція і т. Д.);
- * - квантіфікатор для позначення жодного або більше символів.
Примітка: парсер може бути написаний будь-якою мовою програмування: C #, Delphi, Java, PHP і т. Д., Але суть його від цього не змінюється.
Приватним і частим випадком парсинга служить розбір структурованих даних в форматі XML або HTML.
XML-парсер на PHP
Для створення XML-парсера на PHP зручно використовувати розширення SimpleXML для перетворення XML в об'єкт, наприклад:
$ Str = <<< XML <? Xml version = '1.0'?> <Document> <price> 100 </ price> <unit> руб. </ Unit> </ document> XML; $ Xml = simplexml_load_string ($ str); echo '<pre>'; var_dump ($ xml); echo '</ pre>';
Результат роботи цього PHP-парсера матиме вигляд:
object (SimpleXMLElement) # 1 (2) {[ "price"] => string (3) "100" [ "unit"] => string (7) "руб." }
Ваш бонус: приклад роботи PHP-парсера розбору RSS-стрічки ви можете подивитися тут: parser.c3h.ru/rss , А безкоштовно скачати його вихідний код тут: yadi.sk/d/6f8KsYkPtCyjD .
HTML-парсер на PHP
Для створення HTML-парсера на PHP зручно використовувати розширення DOM , Наприклад:
$ str = '<html> <body> не май <span class = "price"> 100 </ span> рублів, а май <span class = "count"> 100 </ span> друзів </ body> </ html > '; $ Doc = new DOMDocument (); $ Doc-> loadHTML ($ str); $ Spans = $ doc-> getElementsByTagName ( 'span'); if ($ spans-> length> 0) {for ($ i = 0; $ i <$ spans-> length; $ i ++) {$ span = $ spans-> item ($ i); if ($ span-> hasAttribute ( 'class')) {$ class = $ span-> getAttribute ( 'class'); if (preg_match ( " '^ price $' iu", $ class)) {echo 'price ='. $ Span-> textContent. ' <br/> '; }}}}
Результат роботи цього PHP-парсера матиме вигляд:
price = 100
Ваш бонус: приклад роботи PHP-парсера розбору RSS-стрічки ви можете подивитися тут: parser.c3h.ru/html , А безкоштовно скачати його вихідний код тут: yadi.sk/d/KdPU4OnitCyhZ .
Примітка: читайте також статтю « Парсер сайтів на прикладі Яндекс парсеру ».
Коротке посилання: http://goo.gl/fb/US91iE