Посмотрел некоторые примеры парсеров и некоторые библиотеки для работы с DOM. В итоге ничего достаточно удобного не нашел, или же были достаточно удобные, но "падали" при работе с достаточно большими страницами.
Ну и хотелось не использовать миллион регулярок чтобы получить желаемый результат.
В итоге наткнулся на phpQuery.
Что это? А это практически тоже самое что и JQuery с небольшим отличием, что работает на php, а не на JS.
Плюс в том, что если вы знаете JQuery, то вам будет легко использовать phpQuery т.к. практически все, что есть в JQuery, есть и в phpQuery.
Ну перейдем к примеру использования.
В качестве примера, набросал парсер новостей с этого сайта.
Времени ушло на написание этого парсера буквально 10 минут с написанием всех комментариев. Аналогично будет и с другими сайтами.
require_once 'phpQuery.php';
// Загрузим страницу
$content = file_get_contents('http://johncms.com/news/index.php');
// Покормим phpQuery кодом страницы
$document = phpQuery::newDocument($content);
// Выберем списочные элементы в которых есть заголовок и текст новости
$list_elements = $document->find('.list1, .list2');
// Пробегаем по найденым элементам и делаем с ними что угодно.
foreach ($list_elements as $element)
{
// Чтобы с элементом что-то сделать, нужно скормить его phpQuery
$pq = pq($element);
// Заголовок новости у нас лежит в теге H3. Выберем этот тег и возьмём из него текст.
$title_news = $pq->find('h3')->text();
echo '<br><b>Заголовок новости:</b> '.$title_news.'<br>';
// В элементах с классами gray и sub у нас лежит не нужная информация, типа автора и ссылки на обсужение
// Ну и так же т.к. заголовок новости мы уже получили, нужно его удалить из текста.
$pq->find('.gray, .sub, h3')->remove();
// Получим очищенный текст новости.
echo $pq->text();
}
В коде рассмотрено только получение необходимых данных со страницы жертвы. Сохранение данных можно сделать самостоятельно для своей системы управления контентом.
Реп на гугле https://code.google.com/p/phpquery/
Блог: http://phpquery-library.blogspot.ru/