Парсим HTML через DOM
Автор: SysaninАпр 3
Уже писал как можно удобно парсить html файлы с помощью класса PHP Simple HTML DOM Parser используя синтаксис известной JS библиотеки jQuery. Но у этого метода есть два недостатка, причем один из них весьма существенн: медленная работа. Ну и так же требуется тянуть лишней сторонний код. Для более быстрой работы советую взглянуть в сторону встроенного класса (php >= 5) DOM. Он может разбивать в DOM HTML документы и XML.
Кстати с помощью этого класса очень удобно создавать или читать xml файлы, использовать их как промежуточное хранилище (когда MySQL нецелесообразно использовать как хранилище, например, когда надо аяксом подгружать относительно статические или закэшированные файлы и одновренно использовать их в php скриптах, так же удобны для транслирования данных на другие сайты).
Сегодня покажу как парсить html. Как-нибудь в следующий раз напишу про xml.
Допустим у нас есть следующий код:
$dom = new DOMDocument();
//открываем документ HTML из строки и парсим его
//если надо открыть из файла используйте loadHTMLFile($file)
$dom->loadHTML($str);
//получаем в $table все таблицы
//getElementsByTagName('NameTag') ищет все теги с заданым именем
$table = $dom -> getElementsByTagName('table');
//теперь мы можем получить доступ к найденым элементам через
//имя_объекта->item(номер_найденого_элемента)
//свойство имя_объекта->length содержит количество item'ов
//выделяем строки из найденой второй таблицы
$stroki = $table -> item(1) -> getElementsByTagName('tr');
//выделяем ячейки с именем и фамилией девушки
$sec_name = $stroki -> item(1) -> getElementsByTagName('td');
//собственно выводим фамилию
echo $sec_name -> item(1) -> nodeValue;
P.S. я показал как распарсить наиболее примитивно html документ, думаю я еще буду писать на эту тему. Если же вы хорошо владеете английским, то можете почитать больше про этот класс на официальном сайте http://by.php.net/manual/ru/book.dom.php
2 коммент.
Пишет EnerGy | дата: 4 июля 2010 в 12:16
Здравствуйте. на странице есть элемент value
как получить его значение при парсинге?
Пишет Sysanin | дата: 14 июля 2010 в 18:22
$dom->loadHTML($str);
$value = $dom -> getElementsByTagName(’value’);
$attr = $value -> item(0) -> attributes;
$attr будет содержать ассациотивный массив со всеми атребутами элемента value, в т.ч. и его значение