Ответ 1
В качестве еще одного упомянутого комментария Python-Markdown имеет API расширений, и, случается, он использует xml.etree.ElementTree под капотом. Теоретически вы можете создать расширение, которое обращается к этому внутреннему объекту ElementTree и делать с ним то, что вам нужно. Однако, если вы используете необработанный HTML (включая объекты HTML) и/или расширение кода, вы получите неполный документ, так как есть несколько постпроцессоров, которые выполняются в сериализованной строке. Поэтому я бы не стал его повторять по назначению (полное раскрытие: я разработчик Python-Markdown).
Достаточно длинный список, если существуют реализации Markdown здесь. Из чистых реализаций Python в этом списке Mistune является единственным, о котором я знаю, который использует двухэтапный процесс (первый шаг возвращает дерево разбора, шаг два сериализуют дерево разбора - вам нужен только первый шаг). Я никогда не использовал Mistune лично и не могу говорить о его стабильности или точности, но он должен быть клон Python из очень хорошей библиотеки JavaScript Marked.
Если вы ищете вокруг, я считаю, что некоторые из реализаций C используют аналогичный шаблон. Некоторые из них могут даже иметь оболочку Python. Если нет, создавать обертку с ctypes не должно быть слишком сложно.
Если по какой-то причине вы хотите использовать реализацию, которая не дает вам полного дерева синтаксического анализа, я бы предложил разбор полученного HTML с помощью LXML ( Python-оболочка C lib) или html5lib (чистый python), оба из которых могут возвращать объект ElementTree и намного быстрее (особенно LXML) и более прощающие недействительного HTML (особенно html5lib, который больше похож на настоящие браузеры в реальном мире). Помните, что Markdown может содержать необработанный HTML-код, и большинство маркер-парсеров просто передают его, действительный-или-нет. Если вы затем попытаетесь проанализировать его с помощью синтаксического анализа на основе XML (например, в xml.etree) или строгого парсера HTML (например, html.parser в стандартной библиотеке), один недопустимый тег может привести к сбою анализатора HTML.