Если вам необходимо регулярно парсить HTML, то тогда эта статья для Вас.
Шаг №1. Подготовка
Первое, что вам нужно сделать, это загрузить simpleHTMLdom библиотеку, которая свободно распространяется в SourceForge.
Там есть несколько файлов, но нам нужен simple_html_dom.php, остальные только примеры работы библиотеки.
Шаг 2. Разбор основ
$html = new simple_html_dom(); // Загрузка с рядка $html->load('<html><body><p>Hello World!</p><p>We're here</p></body></html>'); // Загрузка с файла $html->load_file('http://firefox-me.ru/');
<html> <body> <p>Hello World!</p> <p>We're Here.</p> </body> </html>
#создание и загрузка HTML include('simple_html_dom.php'); $html = new simple_html_dom(); $html->load("<html><body><p>Hello World!</p><p>Мы здесь</p></body></html>"); # взять все элементы с второго <p></p> $element = $html->find("p"); # изменяет $element[1]->innertext .= " и здесь остались ."; # вывод! echo $html->save();
Другие селекторы
Вот некоторые другие примеры селекторов.
# берет первый элемент id="foo" $single = $html->find('#foo', 0); $collection = $html->find('.foo'); # берет все элементы a $collection = $html->find('a'); # берет все элементы H1 $collection = $html->find('h1 a'); # берет все img тега a title из 'himom' $collection = $html->find('img[title=himom]');
Документация
Полную документацию по библиотеке можно найти на странице документации проекта.
Шаг 3. Реальный пример
Чтобы показать библиотеку в действии, мы напишем сценарий для быстрого парсинга содержания сайта firefox-me.ru.
<div style="text-align: left;">include('simple_html_dom.php'); $articles = array(); getArticles('http://firefox-me.ru/ocenka-vidimosti-sajta/');
<div class="post"> <div class="post-top"> </div> <div class="entry clear"> </div> </div>
Шаг 4. Пишем функцию для парсинга
function getArticles($page) { global $articles; $html = new simple_html_dom(); $html->load_file($page); // ... more ... }
В new simple_html_dom () мы загружаем нашу страницу.
Шаг 5. Поиск нужной нам информации
$items = $html->find('div[class=post]'); foreach($items as $post) { $articles[] = array($post->children(0)->outertext, $post->children(1)->first_child()->outertext); }
Давайте теперь разберемся как это работает.
Линия 1: Создает массив элементов — DIV с классом post. Теперь у нас есть статьи, что хранятся в $ items.
Строка 5: Мы выбираем верхнюю часть статьи в данном случае children (0) и помещаем в переменную $articles .
Помните всегда нужно начинать считать с 0 дочерние элементы, как показано на рисунке вверху.
Шаг 6 Постраничная навигация
<a href="http://firefox-me.ru/ocenka-vidimosti-sajta/" class="more-link">»</a>
if($next = $html->find('a[class=more-link]', 0)) { $URL = $next->href; $html->clear(); unset($html); getArticles($URL); }
Шаг 7 Вывод результата
#main { margin:80px auto; width:500px; } h1 { font:bold 40px/38px helvetica, verdana, sans-serif; margin:0; } h1 a { color:#600; text-decoration:none; } p { background: #ECECEC; font:10px/14px verdana, sans-serif; margin:8px 0 15px; border: 1px #CCC solid; padding: 15px; } .item { padding:10px;}
Далее будет не большой кусочек php для вывода информации.
<?php foreach($articles as $item) { echo "<div class='item'>"; echo $item[0]; echo $item[1]; echo "</div>"; } ?>
В заключение к сведению хочу сказать прежде чем парсить сайт нужно получить разрешении.
Спасибо за чтение!
Источник
ВСЕ ДЛЯ НОВИЧКА
Мой блог находят по следующим фразам
- wordpress большой кеш долго удаляется
- Google API Fonts
- загрузка изображений в wordpress
- Все заставки
- блог wordpress форма регистрация
- joomla облако тегов