zaartix
Новичок
[regexp] парсинг html, создание шаблона по списку страниц
не смог сформулировать точнее тему. Пишу парсер html для определения шаблона страниц.
На входе несколько страниц html одного сайта. Я хочу разбить каждую страницу на теги, не теряя текст и порядок тегов. Пытаюсь делать это таким регом:
Эти теги я выбрал т.к. именно они (на мой взгляд) могут задавать структуру шаблона. Родителей этих тегов не беру специально, т.к. не вижу в них смысла.
По-сути мне надо разбить страницу на эти теги + все, что до первого из них (типа хидера) и все, что после последнего (типа футера).
Только вот беда, на некоторых страницах этот рег "съедает" огромные куски кода, которые можно размельчить гораздо сильнее. Можно как-то указать, что сначала надо делить в таком порядке - li, dd, dt, div, td, tr?
Основная суть:
мельчить страницу на указанные теги в массив и сравнивать с массивом тегов второй страницы. Там, где будут расхождения - заменять содержимое тега на, к примеру: "<td><!--*--></td>". Таким образом я надеюсь получить типичный для текущего сайта шаблон.
Модерторов прошу не считать эту тему запрещенной, т.к. речь идет об индексаторе, а не граббере.
-~{}~ 18.02.09 16:58:
Соответственно, для выдирания хидера и футера используется
не смог сформулировать точнее тему. Пишу парсер 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);