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

от автора

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

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

В обзоре будут представлены краткие выдержки из официального мануала, а так же пример реализации парсера для twitter. Кого заинтересовала данная тема, добро пожаловать под кат.

Получение 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;  

Целью статьи не является предоставить исчерпывающую документацию по данному скрипту, подробное описание всех возможностей вы можете найти в официальном мануале, если у сообщества возникнет на то желание я с удовольствием переведу весь мануал на русский язык, пока же приведу обещанный в начале статьи пример парсера для 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>';                 } 

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

ссылка на оригинал статьи http://habrahabr.ru/post/176635/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *