¿Cómo genero una tabla de contenido para texto HTML en Python?

Supongamos que tengo algún código HTML, como este (generado desde Markdown o Textile o algo así):

A header

Foo

Another header

More content

Different header

Another toplevel header

¿Cómo podría generar una tabla de contenido para ella usando Python?

Use un analizador HTML como lxml o BeautifulSoup para encontrar todos los elementos del encabezado.

Aquí hay un ejemplo usando lxml y xpath.

 from lxml import etree doc = etree.parse("test.xml") for node in doc.xpath('//h1|//h2|//h3|//h4|//h5'): print node.tag, node.text