3

Я ищу алгоритмы для построения структур данных, которые можно использовать для исправления разбитого HTML. Я знаю, что на каждом языке существует множество встроенных инструментов для этого. Но я хочу это узнать. Некоторые подходы я могу думать -Алгоритмы для исправления разбитого HTML

  1. Использование регулярных выражений - кажется наивным подходом
  2. Создание DOM - но как бы DOM дерево получить созданный с разбитым HTML?

ОБНОВЛЕНИЕ: Это более общая дискуссия, которую я ожидаю. Но если вы ссылаетесь на какие-либо инструменты на C, C++, Python или Java, я в порядке.

благодаря

ответ

3

PARSE разметку, используя the HTML 5 parsing algorithm (который предназначен для обработки разбитость), и построить DOM из него. Затем вы можете сериализовать обратно в HTML.

+0

Хорошая ссылка, хотя смешно, что она говорит «В результате путаницы - с валидаторами, утверждающими, что документы имеют одно представление, в то время как широко развернутые веб-браузеры функционально реализованы в другом представлении - потеряли десятилетия производительности». Даже «широко развернутых» веб-браузеров даже не было «десятилетий», если они не означают «1,5 десятилетия». –

+2

человеко-десятилетия! :) – Quentin

2

RegEx + HTML = катастрофа.

Существует слишком много способов, чтобы HTML был действительным SGML, но нарушайте правила RegEx.

Действительно, вам нужны синтаксические анализаторы SGML. Вы не говорите, на каких языках вы готовы работать, но есть много синтаксических анализаторов SGML.

В .NET мы регулярно используем SGMLReader - анализатор состояния, который возвращает хорошо сформированные DOM и/или XML DOM.

В C, W3C имеет разумный C SGML Parser

В Java есть SAX-style SGML parser

1

Я согласен с идеей о том, что регулярные выражения дорога длинная и извилистая: гораздо надежнее и проще в использовании существующие коды, предназначенные только для чтения сломанной HTLM.

Поскольку вы упоминаете Python, парсер Beautiful Soup, по общему мнению, отлично обрабатывает разбитый HTML.

Смежные вопросы