Парсинг HTML на PHP

можливості PHP для створення парсеров зараз розповім про один із способів парсинга html (він підійде і для xml теж, до речі).

Чи краще парсити html регулярними виразами або використовувати для цих цілей

можливості PHP DOM,

є холіваров. Все залежить від складності структури даних. Адже якщо структура досить складна, то за допомогою регулярок доводиться парсити в кілька етапів: спочатку виділити великий шматок, потім розділити його на більш дрібні і т.д .. У підсумку, якщо дані складні (або їх дуже багато), то процес парсинга може значно затягнутися. Ресурсомісткість в цьому випадку ще буде залежати, звичайно ж, від самих регулярних виразів. Якщо в регекспи багато ". *" (Вони є самими ресурсоємними, тому що "прочісують" вихідний код з максимальною

жадібністю), то уповільнення буде помітним.

І ось якраз в цьому-то випадку як не можна до речі доводиться PHP DOM. це зручний

інструмент для парсинга як XML, так і HTML. Деякі дотримуються думки, що парсити html регекспи взагалі не можна, і люто захищають PHP DOM.

Пірімер скрипта наочно показує, як це все легко і просто. У прикладі розбирається html з частиною карти сайту якогось блогу. Він присвоєно змінної прямо всередині коду. В "бойових" ж умовах вихідні дані слід отримувати, наприклад, через file_get_contents ().

&lt;? Php $ html = '<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Strict // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" > <head> <title> Parsing-and-i.blogspot.com Map </ title> </ head> <body> <h2> Останні теми блогу </ h2> <! - на 09.08.2009 -> < table border = "0"> <tbody> <tr> <td> <a href = "http://parsing-and-i.blogspot.com/2009/08/blog-post_06.html" title = "Бази" > http://parsing-and-i.blogspot.com/2009/08/blog-post_06.html </a> </ td> <td> Бази </ td> </ tr> <tr> <td> <a href="http://parsing-and-i.blogspot.com/2009/08/mysql-delphi-express.html" title="MySQL і Delphi. Express-метод"> http: // parsing-and -i.blogspot.com/2009/08/mysql-delphi-express.html </a> </ td> <td> MySQL і Delphi. Express-метод </ td> </ tr> <tr> <td> <a href = "http://parsing-and-i.blogspot.com/2009/08/blog-post.html" title = "Пост про те, що краще сто раз перевірити "> http://parsing-and-i.blogspot.com/2009/08/blog-post.html </a> </ td> <td> Пост про те, що краще сто раз перевірити </ td> </ tr> </ tbody> </ table> </ body> </ 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. '<br>'; echo $ cols-> item (1) -> nodeValue. '&lt;br>'; echo '<hr>'; }?>

В результаті після запуску скрипта прикладу отримуємо таку картину:

джерело

Ще записи по темі

Lt;?
Lt;br>'; echo '<hr>'; }?

Дополнительная информация

rss
Карта