Идея данного проекта — создать инструмент позволяющий работать с 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/
Добавить комментарий