venetu
Мой дом здесь!
- Регистрация
- 28 Мар 2007
- Сообщения
- 745
- Реакции
- 273
Есть такая штука, htmltidy.
Она идет и как расширение php, и как отдельный бинарник.
Лежит на tidy.sourceforge.net.
Так вот.
Прогоняешь любой html через нее - и получаешь на выходе валидный xhtml, который 100% распарсивается в DOM, и который просто ФАНТАСТИЧЕСКИ удобно дергать через xpath. Кто хоть раз пробовал - обратно на регекспы не перейдут ни за какие коврижки!
А по теме, насчет универсального парсера - я бы копал в двух направлениях:
1) Сравнивание разных страниц сайта (можно даже "в лоб", через strcmp()), нахождение у них общих кусков, удаление этих кусков.
2) поиск длинных абзацев текста. Выбираем теги, которые могут встретиться в статье (<a>, <p>, <img>, <br>, ...) и теги, которые гарантированно не могут (</td>, </table> ..).
Дальше шуруем по коду страницы и ищем самый большой участок, в котором среди текста встречаются только разрешенные теги.
Короче полет для фантазии тут большой. Обычно все-таки намного проще решать частные случаи и добавлять шаблоны по мере надобности.
Она идет и как расширение php, и как отдельный бинарник.
Лежит на tidy.sourceforge.net.
Так вот.
Прогоняешь любой html через нее - и получаешь на выходе валидный xhtml, который 100% распарсивается в DOM, и который просто ФАНТАСТИЧЕСКИ удобно дергать через xpath. Кто хоть раз пробовал - обратно на регекспы не перейдут ни за какие коврижки!
А по теме, насчет универсального парсера - я бы копал в двух направлениях:
1) Сравнивание разных страниц сайта (можно даже "в лоб", через strcmp()), нахождение у них общих кусков, удаление этих кусков.
2) поиск длинных абзацев текста. Выбираем теги, которые могут встретиться в статье (<a>, <p>, <img>, <br>, ...) и теги, которые гарантированно не могут (</td>, </table> ..).
Дальше шуруем по коду страницы и ищем самый большой участок, в котором среди текста встречаются только разрешенные теги.
Короче полет для фантазии тут большой. Обычно все-таки намного проще решать частные случаи и добавлять шаблоны по мере надобности.