Парсинг html на php от а до я.

Парсинг HTML на PHP
Потихоньку изучаю возможности PHP для создания парсеров. Я уже писала о том, как парсить xml на php с помощью SimpleXML. Сейчас расскажу об одном из способов парсинга html (он подойдет и для xml тоже, кстати). Повторю, что в php я не гуру, поэтому буду очень признательна, если вы оставите свои комментарии к поднятой теме.
Побродив по нашим и англоязычным форумам, поняла, что спор о том, лучше ли парсить html регулярными выражениями или использовать для этих целей возможности PHP DOM, является холиваром. Сама же я пришла к выводу, что все зависит от сложности структуры данных. Ведь если структура достаточно сложная, то с помощью регулярок приходится парсить в несколько этапов: сначала выделить большой кусок, потом разделить его на более маленькие и т.д.. В итоге, если данные сложные (или их очень много), то процесс парсинга может значительно затянуться. Ресурсоемкость в этом случае еще будет зависеть, конечно же, от самих регулярных выражений. Если в регэкспах много "".*"" (они являются самыми ресурсоемкими, т.к. ""прочесывают"" исходный код с максимальной жадностью), то замедление будет заметным.
И вот как раз в этом-то случае как нельзя кстати приходится PHP DOM. Это удобный инструмент для парсинга как XML, так и HTML. Некоторые придерживаются мнения, что парсить html регэкспами вообще нельзя, и яростно защищают PHP DOM.
В свою очередь я ознакомилась с этим расширением, написав простенький скрипт. Который и привожу здесь, чтобы наглядно показать, как это все легко и просто. В примере разбирается html с частью карты сайта этого блога. Он присвоен переменной прямо внутри кода. В ""боевых"" же условиях исходные данные следует получать, например, через file_get_contents().
$html = '
Parsing-and-i.blogspot Map
Последние темы блога
















parsing-and-i.blogspot/2009/08/blog-post_06.htmlБазы
parsing-and-i.blogspot/2009/08/mysql-delphi-express.htmlMySQL и Delphi. Express-метод
parsing-and-i.blogspot/2009/08/blog-post.htmlПост о том, что лучше сто раз проверить

';
/** создаем новый dom-объект **/
$dom = new domDocument;
/** загружаем html в объект **/
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
/** элемент по тэгу **/
$tables = $dom->getElementsByTagName('table');
/** получаем все строки таблицы **/
$rows = $tables->item(0)->getElementsByTagName('tr');
/** цикл по строкам **/
foreach ($rows as $row)
{
/** все ячейки по тэгу **/
$cols = $row->getElementsByTagName('td');
/** выводим значения **/
echo $cols->item(0)->nodeValue.'
';
echo $cols->item(1)->nodeValue.'
';
echo '';
}
?>
В результате после запуска скрипта получаем такую картину:
Upd: Без всякого сомнения, для более удобной работы со структурой HTML в PHP вам надо познакомиться с библиотекой PHP Simple HTML DOM Parser. Я бы отдала предпочтение именно ей.
Чтобы быть в курсе обновлений блога, можно подписаться на RSS.

Нужен парсинг данных?

Собираем открытые данные с любых веб-сайтов: цены, названия, артикулы, описания, свойства, категории, фото, отзывы, ссылки, тел.номера, e-mail и многое другое.

Написать
img