По различным причинам, которые выходят за рамки этого вопроса, я использую класс синтаксического анализа adhoc html, написанный на python.Этот простой класс до сих пор был достаточным для того типа ввода, который он выдавал, но недавно он пытался проанализировать http://forum.macbidouille.com/index.php?showtopic=160607
Эта веб-страница, очевидно, автоматически генерируется некоторым php-кодом, но она содержит сгенерированный пользователем HTML,включается дословно в качестве подписи для каждого поста.В частности, http://forum.macbidouille.com/index.php?showtopic=160607#entry1563022 содержит следующий HTML-код (комментарии удалены и теги с отступом для ясности):
<div class="signature">
<span style="font-family:Verdana">
<span style="color:#8B0000">
<span style="font-size:12pt;line-height:100%">
<div align='center'>La Culture coûte cher, mais l'inculture coûte encore plus cher à la Société. <br />
<span style="font-size:8pt;line-height:100%"><i>Marcel Landowsky</i></span>
</span><br />
</div>
</span>
</span>
<div align='left'><br />macbook unibody 10.6.8 - 2.26ghz - 4Go- 250Go - <br />Je n'ai pas de télévision !</div>
</div>
Как должно быть очевидно из вышесказанного, есть блочный тег, который закрывается слишком рано,то есть у нас здесь неверный HTML.Ничего экстраординарного, но этого достаточно, чтобы мой код разбора потерпел неудачу.В частности, до сих пор этот код анализа имеет очень простую стратегию обработки ошибок: он просто пытается сопоставить каждый закрывающий тег с текущим открытым тегом, а если закрывающий тег не совпадает, он игнорируется.
ВВ случае приведенного выше кода это приводит к игнорированию в строке 7, поскольку он не соответствует открытому в настоящее время тегу из строки 5, а затем игнорированию в последней строке, поскольку он не соответствует открытому в настоящее время тегу в строке 2. В результате всепредполагается, что html, следующий за этим блоком, иерархически включен в первый тег, что позже приведет к другим проблемам.
Чего я хотел бы добиться, так это «лучше синхронизировать» состояние анализа, и мне интересно, какого родапростой подход привел бы к парсеру, который может обрабатывать этот блок HTML.Я вижу, как можно попытаться свести к минимуму количество выбрасываемых закрывающих тегов после завершения анализа путем реорганизации сгенерированного дерева, но я ищу более простое решение.
Я знаю, что первым ответом будет: «использовать библиотеку X», и это, вероятно, то, чем я собираюсь в конечном итоге заниматься, но мне действительно интересно, какие интересные стратегии анализа и обработки ошибок могут бытьиспользуется в этом случае.то есть я пытаюсь получить образование:)
спасибо!