Простой HTML парсинг с Simple HTML DOM Library

Если вам необходимо регулярно парсить HTML, то тогда эта статья для Вас.

Шаг №1. Подготовка


60c1cbd5

Первое, что вам нужно сделать, это загрузить simpleHTMLdom библиотеку, которая свободно распространяется в SourceForge.

Там есть несколько файлов, но нам нужен simple_html_dom.php, остальные только примеры работы библиотеки.

Download from Sourceforge

Шаг 2. Разбор основ

Эта библиотека очень проста в использовании, но есть несколько нюансов которые нужно знать.
Загрузка html
$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 из строки или из файла. Загрузка файла может быть сделана либо через URL, либо через локальную файловую систему. Предостережение: load_file () делегирует данные в file_get_contents . Если опция allow_url_fopen не установлена в вашем файле php.ini, вы не cможете нормально работать с этой функцией.
Доступа к информации
Transforming your HTML
Если у вас есть объект DOM, вы можете начать работать с ним с помощью find () .
<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/');
C помощью функции getArticles мы разбираем страницу. Также мы создаем глобальный массив, для того чтобы статья была целой. Прежде чем мы начнем , давайте посмотрим, как построена страница сайта.
<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. Поиск нужной нам информации

Count The Children
$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>";
 }
?>

В заключение к сведению хочу сказать прежде чем парсить сайт нужно получить разрешении.
Спасибо за чтение!

Источник

ВСЕ ДЛЯ НОВИЧКА

Мой блог находят по следующим фразам




  • orionxl_cool

    Очень рульный компонет. Респект!!! Попробую попользоваться, до этого использовал другую библиотеку xml_dom.

  • http://semasping.info Semasping

    А как например получить разрешение от google?
    Если допустим хочу парсить поисковую выдачу?