Легкий парсинг с помощью phpQuery

1.71K
.
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/
Прикрепленные файлы:
.
Полезная штучка
.
brainhub
Жалко что форум не поддерживает добавление темы в избранное
.
-=ВДРЕБЕЗГИ=-
Simba, покажи пример сохранения для нашего любимого движока
.
Кадило крутится, лавэха мутится
# lazyproger (13.04.2014 / 17:29)
Жалко что форум не поддерживает добавление темы в избранное
В браузере в закладки кинь ))
.
Ей 25
# -=ВДРЕБЕЗГИ=- (13.04.2014 / 17:36)
Simba, покажи пример сохранения для нашего любимого движока
Что там показывать... Запрос в БД не знаешь как выглядит?
.
Блиносвёрт ?
классс, надо посмотреть эту штуку
.
ValekS
Ей 25
Simba, добавь в ПП ссылку на оф.сайт этой штучки или ссылку на документацию, думаю полезно будет. Я уж так и быть в гугле поищу)
Так то прикольный парсер, минимум кода... JQuery я тут и не заметил, или тут взят только принцип JQuery? По факту это простой и понятный пхп)

П.С.
Что то подобное учусь использовать в Андроиде. Там это немного труднее делать... Кстати надо попробовать так же спарсить новости, а то я пробую форум и мало что выходит) Новости всё же проще.
.
Кадило крутится, лавэха мутится
# ValekS (13.04.2014 / 18:23)
Simba, добавь в ПП ссылку на оф.сайт этой штучки или ссылку на документацию, думаю полезно будет. Я уж так и быть в гугле поищу)
Так то прикольный парсер, минимум кода... JQuery я тут и не заметил,
Добавил линки на реп и блог.
JQuery тут как раз пахнет очень сильно))
Например многие методы: val(), text(), html(), remove(), append(), prepend() и т.д. Тут просто в примере многое не требуется. Просто вырезать некоторые дивы с определенными классами и взять текст из нужных дивов.
Ну и плюс ещё принцип работы с селекторами. Передаешь все точно так же как и в JQuery.
.
Ей 25
# Simba (13.04.2014 / 18:31)
JQuery тут как раз пахнет очень сильно))
Я сразу подумал тут сам JQuery будет использоваться) Потом понял что тут JQuery на пхп))) Т.Е. используется пхп, но так словно это JQuery.
Всего: 30