Extraindo Texto de Tags HTML em Python: Análise e Saída
Resumo Rápido
Para limpar uma string de tags HTML em Python, você pode usar uma combinação da função re.sub()
, que é utilizada para buscar e remover as tags, com a função integrada html.unescape()
para converter entidades HTML:
import re
from html import unescape
strip_html = lambda texto: unescape(re.sub('<[^<]+?>', '', texto))
print(strip_html("<h1>Olá, <b>mundo</b>!</h1>"))
# Saída: Olá, mundo!
Dessa forma, você remove efetivamente tudo relacionado ao HTML da string, deixando apenas o texto puro.
Usando html.parser para Processamento Detalhado
Se sua tarefa requer uma análise mais detalhada do conteúdo HTML, considere usar o módulo html.parser
que vem com o Python.
from html.parser import HTMLParser
class MLStripper(HTMLParser):
def __init__(self):
super().__init__()
self.strict = False
self.convert_charrefs = True
self.fed = []
def handle_data(self, d):
self.fed.append(d)
def get_data(self):
return ''.join(self.fed)
def strip_tags(html):
s = MLStripper()
s.feed(html)
return s.get_data()
print(strip_tags("<h1>Olá, <b>mundo</b>!</h1>"))
# Saída: Olá, mundo!
BeautifulSoup para Facilidade de Uso
BeautifulSoup é uma ferramenta que combina perfeitamente usabilidade com uma abordagem flexível.
from bs4 import BeautifulSoup
def strip_html_bs(html):
soup = BeautifulSoup(html, "html.parser")
return soup.get_text()
print(strip_html_bs("<h1>Olá, <b>mundo</b>!</h1>"))
# Saída: Olá, mundo!
BeautifulSoup se destaca em equilibrar simplicidade e funcionalidade, removendo as complexidades associadas ao processamento de HTML.
Limitações do Uso de Expressões Regulares
Expressões regulares podem ser uma solução adequada para tarefas simples; no entanto, elas não são adequadas para lidar com tags aninhadas e HTML malformado. Tenha isso em mente ao escolher sua abordagem.
Proteção contra Problemas Comuns
Proteção contra Ataques XSS
É crucial não confundir a remoção do HTML com sua higienização. Para manter o HTML seguro e proteger contra ataques XSS, utilize ferramentas como MarkupSafe
e Bleach
.
Decodificação de Entidades para Melhor Exibição de Texto
Não se esqueça de converter entidades HTML de volta para caracteres comuns para tornar o texto mais compreensível:
clean_text = strip_html("<HTML> entidades como & são decodificadas!")
print(clean_text)
# Saída: <HTML> entidades como & são decodificadas!
Atenção aos Caracteres de Controle ASCII
Às vezes, é necessário remover caracteres de controle do ASCII para um tratamento adequado do texto:
strip_control_chars = lambda texto: ''.join(ch for ch in texto if ch.isprintable())
Ao realizar essa operação, você pode eliminar caracteres indesejados que dificultam a percepção do texto.
Visualização
O processo de limpeza do texto pode ser visualizado como o trabalho de um limpador em um parque da cidade:
Parque do Texto (🌳📃🌸🗑️🌳): "<div>Olá <b>mundo</b>!</div>"
Limpador (🛀) = Removedor de HTML
🛀✨🌳📃🌸🌳: "Olá mundo!"
Eles percorrem o parque, coletando o lixo HTML, e deixam para trás um gramado limpo de texto.
Criando Soluções Flexíveis
O método para remover HTML depende da tarefa específica e das condições de trabalho.
Dinamismo com Soluções Orientadas a Objetos
Se você precisa de uma solução para tarefas mais complexas e uma função lambda não for suficiente, você pode usar a classe MLStripper
do módulo html.parser
, personalizável para lidar com qualquer desafio.
Trabalhando com Arquivos
Os exemplos fornecidos podem facilmente ser adaptados para processamento de arquivos, o que simplificaria o manuseio de documentos grandes ou o processamento em massa de múltiplos arquivos simultaneamente.
Confiabilidade com HTML Malformado
BeautifulSoup
e html.parser
lidam muito bem com HTML malformado, permitindo que você extraia texto de forma eficiente, mesmo em situações onde outros métodos poderiam falhar.
Materiais Úteis
- Documentação do Beautiful Soup — para entender como trabalhar com Beautiful Soup ao analisar HTML.
- re — Operações com Expressões Regulares — para explorar expressões regulares em Python.
- Removendo HTML de Strings em Python - Stack Overflow — uma coleção de soluções e exemplos da comunidade.
- Documentação do Bleach — para entender como trabalhar com a ferramenta de limpeza de HTML e proteger contra ataques XSS.
- html.parser — Parser Simples de HTML e XHTML — para estudar como trabalhar com HTMLParser em Python.
- regex101 — um serviço para criar, testar e depurar expressões regulares.