Просмотр поста

.
Simba
Кадило крутится, лавэха мутится

Как-то потребовалось мне написать парсер новостей с одного сайта.
Посмотрел некоторые примеры парсеров и некоторые библиотеки для работы с 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/
Прикрепленные файлы: