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
// Подключаем класс парсерса
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 парсер под свои нужны, я думаю, понятен.
Постовой: Блог про арбитраж трафика. 5000 рублей в день на арбитраже сможет каждый.
www.skitt.ru - широкий ассортимент шин по низким ценам
Популярность: 54%
... и самое главное не забудь подписаться на RSS ! 





спасибо. отличный парсер редтюба в 10 строчек =) много трафа получается собирать на таких тюб-сайтах?
вроде они код поменяли. в 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;
}
Да я не собираю трафик на них, просто часто спрашивают про парсеры тьюбов, поэтому выбрал как пример.
Проект классный, но не обновлялся уже очень давно. Также имеет очень серьезную неисправность, которая до сих пор не вылечена и не позволяет, по крайней мере мне, положиться на скрипт 100% (а так хотелось) - http://sourceforge.net/tracker/?func=detail&aid=2848763&group_id=218559&atid=1044037
Привет! Ответил тебе в статье http://ifox.com.ua/topic/280
А за статью спс. Никогда с парсером не работал раньше, но все думал попробовать тему.
сегодня с утра баловался, а вечером нашел вашу статью :)
проблема ээтого скрипта в том, что он очень медленный и кушает много памяти - сегодня пытался вытащить пути к картинкам с одного блога на 300-страницах, так больше 30 страницы за раз не кушалось :(
да, забыл сказать что для php выделено 40 метров.. сервер - дедик
Не стоить пытаться спарсить весь сайт за раз, парсите частями.
Работает все просто заебись. Спасибо. Доволен
Полезный скрипт, я делал свой на подобие этого, но чуть по “другому рецепту”
Для тех, у кого проблемы с пожиранием памяти, юзайте 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();