Esse aqui é um exemplo completo de manipulação de HTML com Python. Na documentação do Python há um exemplo mas eu achei ele incompleto. Esse aqui é mais redondinho.

#!/usr/bin/env python
from HTMLParser import HTMLParser
from urllib import urlopen

class MeuParser(HTMLParser):
   def handle_starttag(self, tag, attrs):
      print "abre %s" % tag

   def handle_endtag(self, tag):
      print "fecha %s" % tag

p = MeuParser()
doc = urlopen('http://www.google.com').read()
p.feed(doc)

Eu crio uma classe filha da classe HTMLParser e sobrescrevo os métodos handle_starttag e handle_endtag. Eles são responsáveis por manipular os eventos disparados por abrir ou fechar alguma tag. Depois eu abro a página do Google e guardo ela na variável doc, lá vai ficar o documento html cru da página do google.

A classe HTMLParser possui o método feed, que foi herdado para a classe MeuParser. Você usa ela para alimentar o parser com texto (você pode até passar o texto aos poucos se quiser).

A saída para esse programa é algo assim (vou colocar só as primeiras 10 linhas):

abre html
abre head
abre meta
abre title
fecha title
abre style
fecha style
abre script
fecha script
fecha head

Legal né? ;)