PHP парсер PHP Simple HTML DOM Parser

Недавно мне понадобился парсер. Гугл по запросу “PHP парсер” ничего подходящего не выдавал, было уже поздно и на ночь глядя заморачиваться с регулярками и изобретать колесо не хотелось. Поэтому выбор пал на буржуйскую разработку PHP Simple HTML DOM Parser.

PHP Simple HTML DOM Parser – простой универсальный PHP парсер, с помощью которого можно быстро сграбить нужную инфу.

Как работать с парсером?

Для начала работы создаем пустой php файл и подключаем в нём php класс simple_html_dom.php:

<?php
include_once('simple_html_dom.php');
?>

На примере redtube’а рассмотрим возможности данного php парсера:

Получить все заголовки видео на странице:

// Функция file_get_html засасывает страницу в массив $html
$html = file_get_html('http://www.redtube.com/redtube/lesbian/');
// Обходим массив и ищем в нем соответствие тэгу H2
foreach($html->find('h2[class="videoTitle"]') as $e) {
echo ''.(++$count).'. <strong>Title:</strong> '.$e->plaintext. '<br/>';
}

Получить все превью:

foreach($html->find('img[class="t"]') as $element) {
echo ''.(++$count).'. <strong>Img:</strong> '.$element->src . '<br/>';

}

Получить все ссылки на видео:

foreach($html->find('a[class="s"]') as $element) {

$elid = str_replace("/", "", $element->href);
echo ''.(++$count).'. <strong>Link:</strong> '.$elid.'<br/>';

}

На скриншоте результат выполнения скрипта:

PHP парсер

Теперь проделаем то же самое, только не просто выведем данные паровозиком  на экран, а загрузим их в какой-нибудь массив:

<?php
// Подключаем  класс парсерса
include_once('simple_html_dom.php');
// Задаем URL страницы
$html = file_get_html('http://redtube.com/redtube/lesbian');

// Цикл разбора массива
foreach($html->find('div[class="video]') as $container) {
$item['title']     = $container->find('h2[class="videoTitle"]', 0)->plaintext;
$item['img']    = $container->find('img[class="t"]', 0)->src;
$item['href'] = str_replace("/", "", $container->find('a[class="s"]', 0)->href);
$containers[] = $item;
}
// Печать содержимого массива
print_r($containers);
?>

Результат выполнения скрипта:

PHP парсер грабер

Далее берем эти данные и делаем с ними, что нам надо. Принцип работы, что приспособить php парсер под свои нужны, я думаю, понятен.


Постовой: Блог про арбитраж трафика. 5000 рублей в день на арбитраже сможет каждый.
www.skitt.ru - широкий ассортимент шин по низким ценам

Популярность: 54%

... и самое главное не забудь подписаться на RSS !

Метки: Кодинг
Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong


Посты по теме:

  
  • Часть 2. Куда можно добавить RSS блога или сайта, база из 50 RSS-каталогов
  • Дух времени 1 и 2
  • Куда можно добавить RSS-каналы блога
  • Партнерский сайт на базе блога
  • Рейтинги блогов + анонс

  • 12 комментариев:

    1. mihalich, 8. Февраль 2010, 17:46

      спасибо. отличный парсер редтюба в 10 строчек =) много трафа получается собирать на таких тюб-сайтах?

       
    2. mihalich, 8. Февраль 2010, 18:18

      вроде они код поменяли. в div - twoRowsTitle нету картинки. попробовал сделать так.

      foreach($html->find(’div[class=”video”]’) as $container) {
      $item[’title’] = $container->find(’img’,0)->title;
      $item[’img’] = $container->find(’img’,0)->src;
      $item[’href’] = $container->find(’img’,0)->id;
      $containers[] = $item;
      }

       
    3. admin, 8. Февраль 2010, 19:02

      Да я не собираю трафик на них, просто часто спрашивают про парсеры тьюбов, поэтому выбрал как пример.

       
    4. доброжелатель, 9. Февраль 2010, 10:31

      Проект классный, но не обновлялся уже очень давно. Также имеет очень серьезную неисправность, которая до сих пор не вылечена и не позволяет, по крайней мере мне, положиться на скрипт 100% (а так хотелось) - http://sourceforge.net/tracker/?func=detail&aid=2848763&group_id=218559&atid=1044037

       
    5. iFox, 11. Февраль 2010, 14:26

      Привет! Ответил тебе в статье http://ifox.com.ua/topic/280
      А за статью спс. Никогда с парсером не работал раньше, но все думал попробовать тему.

       
    6. vredin, 23. Февраль 2010, 0:06

      сегодня с утра баловался, а вечером нашел вашу статью :)

      проблема ээтого скрипта в том, что он очень медленный и кушает много памяти - сегодня пытался вытащить пути к картинкам с одного блога на 300-страницах, так больше 30 страницы за раз не кушалось :(

       
    7. vredin, 23. Февраль 2010, 0:08

      да, забыл сказать что для php выделено 40 метров.. сервер - дедик

       
    8. admin, 23. Февраль 2010, 0:14

      Не стоить пытаться спарсить весь сайт за раз, парсите частями.

       
    9. AxElXXX, 6. Март 2010, 0:15

      Работает все просто заебись. Спасибо. Доволен

       
    10. AxElXXX, 6. Март 2010, 0:16

      :1st: :1st: :1st: :1st: :1st: :1st: :1st: :1st: :pilot: :pilot: :pilot: :pilot: :pilot: :pilot: :pilot: :pilot: :bebe: :bebe: :bebe: :bebe: :bebe: :bebe: :azaza: :azaza: :azaza: :azaza: :chmok: :chmok: :chmok: :chmok: :chmok:

       
    11. uniparser, 24. Май 2010, 16:26

      Полезный скрипт, я делал свой на подобие этого, но чуть по “другому рецепту”

       
    12. Arthur, 29. Май 2010, 2:13

      Для тех, у кого проблемы с пожиранием памяти, юзайте clear();

      foreach($html->find(’div[class=”video]’) as $container) {
      $item[’title’] = $container->find(’h2[class=”videoTitle”]’, 0)->plaintext;
      $item[’img’] = $container->find(’img[class=”t”]’, 0)->src;
      $item[’href’] = str_replace(”/”, “”, $container->find(’a[class=”s”]’, 0)->href);
      $containers[] = $item;

      //И сама очистка
      $container->clear();
      }
      //и ещё раз
      $html->clear();

       

    Напишите комментарий:

    :be: :haha: :kach: :fight: :flowers: :fing: :sucks: :hlop: :cens: :aggr: :1st: :ded: :pilot: :bebe: :azaza: :chmok: