No cenário atual de inteligência artificial e análise massiva de dados, a extração precisa de informações de páginas web tornou-se uma competência fundamental. O Goose3 surge como uma ferramenta especializada em Python para decodificar a estrutura de páginas HTML e isolar o que realmente importa: o conteúdo textual, metadados e elementos multimídia.
Baseado na implementação original em Java, o Goose3 foi reescrito para oferecer uma interface idiomática em Python, sendo amplamente utilizado em pipelines de Data Science, monitoramento de notícias e treinamento de modelos de linguagem (LLMs).
Principais Funcionalidades
- Isolamento de Texto Limpo: Algoritmos avançados para remover menus, rodapés e anúncios, focando no corpo principal do artigo.
- Extração de Metadados: Recuperação automática de títulos, autores, datas de publicação e descrições meta.
- Suporte a Multimídia: Identificação de imagens principais (OpenGraph) e vídeos incorporados.
- Internacionalização: Capacidade de lidar com diferentes idiomas e codificações de caracteres.
Instalação do Pacote
A biblioteca pode ser instalada via gerenciador de pacotes pip. É recomendado o uso de ambientes virtuais para evitar conflitos de dependências.
pip install goose3
Implementação Básica
O fluxo de trabalho com o Goose3 é simplificado. Primeiro, inicializa-se o motor de extração e, em seguida, processa-se a URL desejada. O código abaixo demonstra como capturar as informações básicas de uma página:
from goose3 import Goose
# Instancia o extrator principal
extrator = Goose()
# Define o alvo da extração
url_alvo = 'https://exemplo.com/noticia-tecnologia'
artigo_processado = extrator.extract(url=url_alvo)
# Exibe as propriedades extraídas
print(f"Título capturado: {artigo_processado.title}")
print(f"Resumo (Meta Description): {artigo_processado.meta_description}")
print(f"Conteúdo Principal:\n{artigo_processado.cleaned_text[:500]}...")
if artigo_processado.top_image:
print(f"URL da Imagem de Destaque: {artigo_processado.top_image.src}")
# Libera os recursos (opcional em scripts simples)
extrator.close()
Configurações e Ajustes Avançados
Para cenários profissionais, como o scraping de sites que possuem restrições de acesso ou exigem headers específicos, o Goose3 permite uma customização granular através de um objeto de configuração.
Parâmetros de Configuração Comuns
browser_user_agent: Simula um navegador específico para evitar bloqueios.http_timeout: Define o tempo máximo de espera pela resposta do servidor.use_meta_language: Tenta detectar o idioma automaticamente via tags meta.enable_image_fetching: Ativa ou desativa a lógica de download e análise de imagens.
Veja como aplicar essas configurações em um script:
from goose3 import Goose
from goose3.configuration import Configuration
# Define as preferências de extração
config_personalizada = Configuration()
config_personalizada.browser_user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
config_personalizada.http_timeout = 15 # Segundos
config_personalizada.target_language = 'pt'
config_personalizada.proxies = {
'http': 'http://proxy.exemplo.com:8080',
'https': 'https://proxy.exemplo.com:8080'
}
# Inicializa o Goose com a configuração definida
with Goose(config_personalizada) as g:
dados_site = g.extract(url='https://portaldenoticias.com.br/artigo-01')
print(f"Autor identificado: {dados_site.authors}")
print(f"Data de publicação: {dados_site.publish_date}")
Trabalhando com Conteúdo Local
Além de buscar URLs remotas, o Goose3 é capaz de processar strings HTML que já foram baixadas por outros meios (como Requests ou Selenium). Isso é útil quando a página requer interação via JavaScript antes da extração.
from goose3 import Goose
html_bruto = """
<html>
<body>
<h1>Título do Documento Local</h1>
<div class="conteudo">
<p>Este é o parágrafo principal que deve ser extraído.</p>
</div>
</body>
</html>
"""
extrator_local = Goose()
resultado_local = extrator_local.extract(raw_html=html_bruto)
print(f"Extração de HTML local: {resultado_local.cleaned_text}")
Ao utilizar o Goose3, o desenvolvedor abstrai a complexidade de seletores CSS ou expressões XPath manuais, delegando ao motor da biblioteca a tarefa de heurística para encontrar o núcleo informativo de qualquer página web.