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.