- PVSM.RU - https://www.pvsm.ru -

PHP HTML DOM парсер с jQuery подобными селекторами

Добрый день, уважаемыее. В данном посте речь пойдет о совместном проекте S. C. Chen [1] и John Schlick [2] под названием PHP Simple HTML DOM Parser [3] (ссылки на sourceforge).

Идея данного проекта — создать инструмент позволяющий работать с html кодом используя jQuery подобные селекторы. Оригинальная идея принадлежит Jose Solorzano's [4] и реализована для php четвертой версии. Данный же проект является более усовершенствованной версией базирующейся на php5+.

В обзоре будут представлены краткие выдержки из официального мануала [5], а так же пример реализации парсера для twitter. Справедливости ради, следует указать, что похожий пост уже присутствует [6] на habrahabr, но на мой взгляд содержит слишком малое количество информации. Кого заинтересовала данная тема, добро пожаловать под кат.

Получение html кода страницы

$html = file_get_html('http://habrahabr.ru/'); //работает и с https://
Поиск элемента по имени тега

foreach($html->find('img') as $element) { //выборка всех тегов img на странице
       echo $element->src . '<br>'; // построчный вывод содержания всех найденных атрибутов src
}

Модификация html элементов

$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>'); // читаем html код из строки (file_get_html() - из файла)
$html->find('div', 1)->class = 'bar'; // присвоить элементу div с порядковым номером 1 класс "bar"
$html->find('div[id=hello]', 0)->innertext = 'foo'; // записать в элемент div с id="hello" текст foo

echo $html; // выведет <div id="hello">foo</div><div id="world" class="bar">World</div>

Получение текстового содержания элемента (plaintext)

echo file_get_html('http://habrahabr.ru/')->plaintext; 

Целью статьи не является предоставить исчерпывающую документацию по данному скрипту, подробное описание всех возможностей вы можете найти в официальном мануале [5], если у сообщества возникнет на то желание, я с удовольствием переведу весь мануал на русский язык, пока же приведу обещанный в начале статьи пример парсера для twitter.

Пример парсера сообщений из twitter

require_once 'simple_html_dom.php'; // библиотека для парсинга
            $username = 'habrahabr'; // Имя в twitter
            $maxpost = '5'; // к-во постов
            $html = file_get_html('https://twitter.com/' . $username);
            $i = '0';
            foreach ($html->find('li.expanding-stream-item') as $article) { //выбираем все li сообщений
                $item['text'] = $article->find('p.js-tweet-text', 0)->innertext; // парсим текст сообщения в html формате
                $item['time'] = $article->find('small.time', 0)->innertext; // парсим время в html формате
                $articles[] = $item; // пишем в массив
                $i++;
                if ($i == $maxpost) break; // прерывание цикла
            }
Вывод сообщений

                for ($j = 0; $j < $maxpost; $j++) {
                    echo '<div class="twitter_message">';
                    echo '<p class="twitter_text">' . $articles[$j]['text'] . '</p>';
                    echo '<p class="twitter_time">' . $articles[$j]['time'] . '</p>';
                    echo '</div>';
                }

Благодарю за внимание. Надеюсь получилось не очень тяжеловесно и легко для восприятия.

Похожие библиотеки

htmlSQL [7] — спасибо Chesnovich [8]
Zend_Dom_Query [9] — спасибо majesty [10]
phpQuery [11] — спасибо theRavel [12]
QueryPath [13] — спасибо ZonD80 [14]
The DomCrawler(Symfony) [15] — спасибо choor [16]

P.S.
Хаброжитель Groove [17] подсказал что подобные материалы уже были [18]
P.P.S.
Постараюсь в ближайшее свободное время собрать все библиотеки и составить сводные данные по производительности и приятности использования.

Автор: maeln0r

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/32083

Ссылки в тексте:

[1] S. C. Chen: http://sourceforge.net/users/me578022

[2] John Schlick: http://sourceforge.net/users/john_schlick

[3] PHP Simple HTML DOM Parser: http://sourceforge.net/projects/simplehtmldom/

[4] Jose Solorzano's: http://php-html.sourceforge.net/

[5] официального мануала: http://simplehtmldom.sourceforge.net/manual.htm

[6] уже присутствует: http://habrahabr.ru/post/30781/

[7] htmlSQL: https://github.com/hxseven/htmlSQL

[8] Chesnovich: http://habrahabr.ru/users/chesnovich/

[9] Zend_Dom_Query: http://framework.zend.com/manual/1.12/ru/zend.dom.query.html

[10] majesty: http://habrahabr.ru/users/majesty/

[11] phpQuery: https://code.google.com/p/phpquery/

[12] theRavel: http://habrahabr.ru/users/theravel/

[13] QueryPath: http://querypath.org/

[14] ZonD80: http://habrahabr.ru/users/zond80/

[15] The DomCrawler(Symfony): http://symfony.com/doc/current/components/dom_crawler.html

[16] choor: http://habrahabr.ru/users/choor/

[17] Groove: http://habrahabr.ru/users/groove/

[18] подобные материалы уже были: http://habrahabr.ru/post/176635/#comment_6136809

[19] Источник: http://habrahabr.ru/post/176635/