[regexp] парсинг html, создание шаблона по списку страниц

zaartix

Новичок
[regexp] парсинг html, создание шаблона по списку страниц

не смог сформулировать точнее тему. Пишу парсер html для определения шаблона страниц.
На входе несколько страниц html одного сайта. Я хочу разбить каждую страницу на теги, не теряя текст и порядок тегов. Пытаюсь делать это таким регом:
PHP:
preg_match_all('/(<(li|dd|dt|div|td|tr)[^>]*>)(.*?)(<\/\\2>)/si',$html,$matches);
Эти теги я выбрал т.к. именно они (на мой взгляд) могут задавать структуру шаблона. Родителей этих тегов не беру специально, т.к. не вижу в них смысла.
По-сути мне надо разбить страницу на эти теги + все, что до первого из них (типа хидера) и все, что после последнего (типа футера).

Только вот беда, на некоторых страницах этот рег "съедает" огромные куски кода, которые можно размельчить гораздо сильнее. Можно как-то указать, что сначала надо делить в таком порядке - li, dd, dt, div, td, tr?

Основная суть:
мельчить страницу на указанные теги в массив и сравнивать с массивом тегов второй страницы. Там, где будут расхождения - заменять содержимое тега на, к примеру: "<td><!--*--></td>". Таким образом я надеюсь получить типичный для текущего сайта шаблон.

Модерторов прошу не считать эту тему запрещенной, т.к. речь идет об индексаторе, а не граббере.

-~{}~ 18.02.09 16:58:

Соответственно, для выдирания хидера и футера используется
PHP:
preg_match_all('/^(.*?)(<(li|dd|dt|div|td|tr)[^>]*>)/si',$html,$matches);

preg_match_all('/(<(li|dd|dt|div|td|tr)[^>]*>)(.*?)$/si',$html,$matches);
 

DiMA

php.spb.ru
Команда форума
> на некоторых страницах этот рег "съедает" огромные куски кода

конечно, если будет незакрытый тег типа
<li> <li> </li>

или <td> а тут кучу других тегов </td>

Почему ты не хочешь взять готовый парсер хтмл, строящий дерево всех тегов?
 

zaartix

Новичок
наверное не умею искать, нашел
http://www.phpclasses.org/browse/package/1420.html
он кривой, всмысле на некоторых реальных страницах все разъезжалось.

http://www.phpclasses.org/browse/package/4048.html
этот ближе, но он шибко "разворачивает", памяти куча сжирается. Да и много лишнего в нем, т.к. он немного для другого.

Т.е. ты считаешь, что тут лучше всего использовать парсер всего хтмл? Мне просто потом из этого дерева еще хорошо-бы собрать обратно хтмл :)
Может порекомендуешь какой-нибудь?
 

DiMA

php.spb.ru
Команда форума
я использую парсер от antonio, с другими по скорости не сравнивал, багов не видел
 

DiMA

php.spb.ru
Команда форума
этот. Не знаю, на счет версии. Я его доработал для обработки писем и вырезания от туда всех не разрешенных тегов или атрибутов.
 
Сверху