Equivalente a InnerHTML cuando se usa lxml.html para analizar HTML

Estoy trabajando en un script usando lxml.html para analizar páginas web. He hecho un poco de BeautifulSoup en mi tiempo, pero ahora estoy experimentando con lxml debido a su velocidad.

Me gustaría saber cuál es la forma más sensata en la biblioteca de hacer el equivalente del InnerHtml de Javascript, es decir, recuperar o establecer el contenido completo de una etiqueta.

<body>
<h1>A title</h1>
<p>Some text</p>
</body>

InnerHtml es por lo tanto:

<h1>A title</h1>
<p>Some text</p>

Puedo hacerlo usando hacks (conversión a cadenas / expresiones regulares, etc.) pero supongo que hay una forma correcta de hacerlo usando la biblioteca que me falta debido a la falta de familiaridad. Gracias por cualquier ayuda

EDIT: Gracias a pobk por mostrarme el camino de manera tan rápida y efectiva. Para cualquiera que intente lo mismo, esto es lo que terminé con:

from lxml import html
from cStringIO import StringIO
t = html.parse(StringIO(
"""<body>
<h1>A title</h1>
<p>Some text</p>
Untagged text
<p>
Unclosed p tag
</body>"""))
root = t.getroot()
body = root.body
print (element.text or '') + ''.join([html.tostring(child) for child in body.iterdescendants()])

enga en cuenta que el analizador lxml.html arreglará la etiqueta no cerrada, así que tenga cuidado si esto es un problema.

Respuestas a la pregunta(3)

Su respuesta a la pregunta