Парсинг — это просто!

29 Май 2010   //   Автор: Arthur   //   PHP  //  Комментарии (0)

Довольно часто мне приходится парсить сайты, разнообразные rss фиды, xml файлы. Для парсинга html я обычно использовал curl + regexp. Когда-то надоедает делать одно и то же, в очередной раз мне понадобился парсинг, причём, парсер должен был быть универсальным, т.е. можно было бы задавать много сайтов и тянуть оттуда инфу. Безусловно, под каждый сайт писать регулярные выражения(т.е. отдельный парсер) было бы глупо, а велосипед изобретать не хотелось, я сходил в Google, к моему удивлению, я нашел довольно неплохой  инструмент — Html Simple Dom Parser.

Коротко о возможностях и  требованиях:

1. Требует PHP5
2. Как понятно из названия, использует либу DOM
3. Может не только тянуть, но и изменять html ноды (интересно, какое можно найти этому практическое применение).

4. Для выборки используют селекторы, похожие на селекторы jQuery.
5. Поддерживает невалидный html

С требованиями понятно, но, как говорится, проще один раз увидеть, чем сто раз услышать. Ниже пример работы с библиотекой — забираем с Яндекса ответ на запрос «розовый слон».

<!--?php
 
//Подключаем библиотеку
require_once('simple_html_dom.php');
 
$item_list = array();
 
//Загржаем html в переменную
$buffer = file_get_html("http://yandex.ua/yandsearch?text=%D1%80%D0%
BE%D0%B7%D0%BE%D0%B2%D1%8B%D0%B9+%D1%81%D0%BB%D0%BE%D0%BD&#038;lr=143");
 
//При помощи селектора выбираем необходимые ноды, заталкиваем в массив
foreach($buffer->find('a[class=cs]') as $anchor)
{
  array_push($item_list,
          array($anchor->plaintext, $anchor->href));
  $anchor->clear();
}
$buffer->clear();
print_r($item_list);
 
>

На выходе получаем:

[0] => Array
    (
        [0] => Сеть турагентств "Розовый Слон" Туры из Ростова, туры...
        [1] => http://www.pinkelephant.ru/
    )
 
[1] => Array
    (
        [0] => Розовый слон
        [1] => http://www.pink-elephant.ru/
    )
 
[2] => Array
    (
        [0] => Детские песенки «Розовый слон» - текст и слова песни...
        [1] => http://www.karaoke.ru/song/6867.htm
    )
 
[3] => Array
    (
        [0] => Детский театр моды "Розовый Слон"
        [1] => http://rozoviyslon.com.ua/
    )
 
[4] => Array
    (
        [0] => YouTube - детские песни Розовый слон
        [1] => http://www.youtube.com/watch?v=Q5QET4IJLWo
    )
 
[5] => Array
    (
        [0] => Клуб саморазвития "Розовый слон" - Главная страница
        [1] => http://www.rozovyislon.kz/
    )
 
[6] => Array
    (
        [0] => Розовый слон - Интернет-подарки, оригинальные подарки...
        [1] => http://slon.at.ua/
    )
 
[7] => Array
    (
        [0] => ПЕСНИ из КИНОФИЛЬМОВ." Боба и слон"
        [1] => http://www.songkino.ru/songs/boba_slon.html
    )
 
[8] => Array
    (
        [0] => Тахи Мие. Маша и Розовый слон
        [1] => http://zhurnal.lib.ru/t/tahi_m/mashairozovijslon.shtml
    )
 
[9] => Array
    (
        [0] => Розовый слон — Осин Евгений — Караоке — красноЯРСК.info...
        [1] => http://karaoke.yarsk.info/osin-evgenij/rozovyj-slon/
    )

Важно не забывать вызывать clear() для нод, потому что память достаточно быстро исчерпывается.
Саму библиотеку и более подробную информацию можно найти на сайте проекта

Оставить комментарий

Рубрики
Статистика