HTMLParser chama métodos conforme encontra tags, dados, comentários e entidades. O modelo por eventos é leve e adequado a extrações simples e HTML produzido de forma previsível.
Exemplo prático
from html.parser import HTMLParser
class LinkCollector(HTMLParser):
def __init__(self) -> None:
super().__init__()
self.links: list[str] = []
def handle_starttag(self, tag, attrs) -> None:
if tag == "a":
href = dict(attrs).get("href")
if href:
self.links.append(href)
parser = LinkCollector()
parser.feed('<a href="/docs">Docs</a>')
print(parser.links)
Normalize o que você coleta
Atributos chegam como pares e podem estar ausentes. Resolva URLs relativas contra uma base autorizada e valide esquema e domínio antes de fazer qualquer requisição.
Parser não é sanitizador
HTML real pode ser malformado e scripts podem alterar o DOM depois do carregamento. HTMLParser não executa JavaScript nem torna conteúdo seguro para renderização. Para seletores complexos ou navegador, escolha uma ferramenta específica.
Continue estudando
Leia também Web Scraping com Python: BeautifulSoup e Selenium Completos e Unicode, Bytes e UTF-8 em Python: Guia Prático. A documentação oficial do Python, consultada em 22 de julho de 2026, detalha a API e o comportamento entre versões.