Найти - Пользователи
Полная версия: HTML в валидный XML
Начало » Python для экспертов » HTML в валидный XML
1
shiza
Хочу решить такую задачу:
Превратить HTML в XML (FB2).
Казалось бы… беру понравившийся парсер… и бегу по тегам рекурсивно, попутно формируя XML -ку.

Но XML-ки разрешенная структуру довольно строгая. В каком-то месте можно вставить определненные теги, в каких-то нет.. (все схемой определяется).
Например, если родительский тег такой, а надродительский еще такой… то картинку можно, а если надродительский тег другой - то уже нельзя.
Т.е. XML-ка более ограниченная, чем HTML-ка.

Никто не подскажет - как такие штуки решаются (принимаются любые предложения)?
Ferroman
Переводить в промежуточный формат (например, не такой строгий XML) а уже из него формировать XML.
На самом деле - задача сложная. HTML - формат допускающий разное трактование и написание. Переводить его в строгую структуру врятли получится без конфликтов. Получится либо избыточно, либо ущербно.
bw
html5lib, если я правильно понял задачу.

..bw
shiza
Ferroman
Переводить в промежуточный формат (например, не такой строгий XML) а уже из него формировать XML.
хм. Мне кажется, задача от этого не изменится.

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

bw
html5lib, если я правильно понял задачу.
А в каком качестве ее использовать? Я слышал про нее, как пожалуй наилучший из парсеров HTML в DOM, tree или soap структуры.
Ferroman
Мне кажется, задача от этого не изменится.
Ну почему же? В такой задаче основная проблема - учесть все исключения. Это гораздо проще с переводом сначала в буферный XML. И ошибки ловить легче. И сразу видны моменты “двузначности” и “неопределённости”.
Но может я и усложняю, но по моему это случай “Divide et impera”.
bw
shiza
А в каком качестве ее использовать?
В качестве валидирующего парсера HTML.
HTML -> DOM/ElementTree/BeautifulSoup -> XML (XHTML)

p.s. Работает относительно медленно. Вернее это, пожалуй, будет самым тормазнутым решением.

..bw
shiza
Ferroman Да. Чем больше думаю, тем больше мне кажется что это имеет смысл.
bw Скорость мне не критична. Но. Я привык к BeautifulSoup интерфейсу. А html5lib пока еще в некоторых случаях вылетает - когда парсишь в BeautifulSoup. Поэтому сейчас сначала прогоняю через html5lib - для корректировки кривых html (как корректор - ему нет равных). А потом расапрсиваю результат нативным BeautifulSoup.
bw
Я тоже сначала работал с супом, но при переходе на html5lib пришлось учить xpath. Выучил, проблем не испытываю, очень мощная вещь.

p.s. Тренироваться в xpath удобно, используя специальные плагины к Firebird (я использую xpather).

..bw
shiza
В общем проблема была в подходящем алгоритме, и я его нашел. Если у кого возникнет похожая задача - распишу подробно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB