Skip to content

royopa/anbima_scraper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

19 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ANBIMA Scraper

Python 3.8+ License: MIT Code style: black Imports: isort

Web scraper moderno e robusto para captura de dados financeiros da ANBIMA (AssociaΓ§Γ£o Brasileira das Entidades dos Mercados Financeiro e de Capitais)

πŸ“‹ Índice

🎯 Visão Geral

O ANBIMA Scraper Γ© uma ferramenta Python moderna e robusta para capturar dados financeiros do site da ANBIMA. O projeto foi completamente refatorado aplicando as melhores prΓ‘ticas de desenvolvimento, incluindo:

  • βœ… Arquitetura orientada a objetos com classes bem estruturadas
  • βœ… Sistema de logging robusto com diferentes nΓ­veis e outputs
  • βœ… Tratamento de erros avanΓ§ado com retry automΓ‘tico
  • βœ… Interface de linha de comando (CLI) intuitiva
  • βœ… ConfiguraΓ§Γ£o centralizada e flexΓ­vel
  • βœ… Type hints para melhor desenvolvimento
  • βœ… Testes automatizados (estrutura preparada)
  • βœ… DocumentaΓ§Γ£o completa com docstrings

πŸš€ Principais Melhorias

  • Estrutura modular: CΓ³digo organizado em mΓ³dulos especΓ­ficos
  • ReutilizaΓ§Γ£o: Classe base BaseScraper com funcionalidades comuns
  • Robustez: Cliente HTTP com retry e rotaΓ§Γ£o de user agents
  • Flexibilidade: ConfiguraΓ§Γ£o via arquivos e variΓ‘veis de ambiente
  • Monitoramento: Logs detalhados para troubleshooting
  • Performance: Download apenas de dados novos

πŸ“Š Funcionalidades

🎯 Scrapers Implementados

Scraper Status DescriΓ§Γ£o Dados Capturados
Indicators βœ… Completo Indicadores financeiros SELIC, CDI, IPCA, IGP-M, DΓ³lar, Euro, TR, TBF, FDS
IDKA βœ… Completo Índice de DuraΓ§Γ£o Constante ANBIMA Retornos, volatilidade, taxas de juros
IMA Carteiras πŸ”„ Estrutura Carteiras teΓ³ricas IMA ComposiΓ§Γ£o de carteiras
IMA Quadro Resumo πŸ”„ Estrutura Quadro resumo IMA Resultados diΓ‘rios
Curvas de Juros πŸ”„ Estrutura Curvas de juros fechamento Curvas zero-cupom
DebΓͺntures πŸ”„ Estrutura Mercado secundΓ‘rio de debΓͺntures Taxas mΓ©dias

πŸ”§ Funcionalidades AvanΓ§adas

  • VerificaΓ§Γ£o automΓ‘tica: Detecta dados existentes e baixa apenas o necessΓ‘rio
  • Processamento seguro: Limpeza automΓ‘tica de dados invΓ‘lidos
  • DeduplicaΓ§Γ£o: Remove registros duplicados automaticamente
  • OrdenaΓ§Γ£o: Organiza dados por data de referΓͺncia
  • ValidaΓ§Γ£o: Verifica integridade dos dados baixados
  • Logs estruturados: Rastreamento completo das operaΓ§Γ΅es

πŸ› οΈ InstalaΓ§Γ£o

PrΓ©-requisitos

  • Python 3.8 ou superior
  • pip (gerenciador de pacotes Python)

InstalaΓ§Γ£o BΓ‘sica

# Clone o repositΓ³rio
git clone https://github.com/royopa/anbima_scraper.git
cd anbima_scraper

# Instale as dependΓͺncias
pip install -r requirements.txt

InstalaΓ§Γ£o em Modo Desenvolvimento

# Clone o repositΓ³rio
git clone https://github.com/royopa/anbima_scraper.git
cd anbima_scraper

# Instale em modo desenvolvimento
pip install -e .

# Instale dependΓͺncias de desenvolvimento
pip install -r requirements.txt

ConfiguraΓ§Γ£o Inicial

  1. Crie os diretΓ³rios necessΓ‘rios (criados automaticamente):

    mkdir -p data/raw data/processed logs
  2. Configure arquivos opcionais:

    • user-agents.txt: Lista de user agents para rotaΓ§Γ£o
    • ANBIMA.txt: Arquivo de feriados da ANBIMA

πŸš€ Uso RΓ‘pido

Interface de Linha de Comando (CLI)

# Executar todos os scrapers
python -m anbima_scraper run-all

# Executar apenas indicadores
python -m anbima_scraper run indicators

# Executar mΓΊltiplos scrapers
python -m anbima_scraper run indicators idka

# ForΓ§ar atualizaΓ§Γ£o (mesmo se dados existirem)
python -m anbima_scraper run-all --force

# Verificar status dos scrapers
python -m anbima_scraper status

# Listar scrapers disponΓ­veis
python -m anbima_scraper list

Uso via Python

from anbima_scraper import ANBIMAScraper

# Criar instΓ’ncia do scraper
scraper = ANBIMAScraper()

# Executar todos os scrapers
results = scraper.run_all()

# Executar scraper especΓ­fico
success = scraper.run_scraper("indicators")

# Verificar status
status = scraper.get_scraper_status()

# Executar mΓΊltiplos scrapers
results = scraper.run_multiple(["indicators", "idka"])

Exemplo Completo

#!/usr/bin/env python3
"""
Exemplo completo de uso do ANBIMA Scraper.
"""

from anbima_scraper import ANBIMAScraper

def main():
    # Criar instΓ’ncia
    scraper = ANBIMAScraper()
    
    # Verificar status atual
    print("Status atual:")
    status = scraper.get_scraper_status()
    for name, last_date in status.items():
        date_str = last_date.strftime("%Y-%m-%d") if last_date else "Sem dados"
        print(f"  {name}: {date_str}")
    
    # Executar scrapers
    print("\nExecutando scrapers...")
    results = scraper.run_all()
    
    # Mostrar resultados
    print("\nResultados:")
    for name, success in results.items():
        status = "βœ“" if success else "βœ—"
        print(f"{status} {name}")

if __name__ == "__main__":
    main()

πŸ“š DocumentaΓ§Γ£o Detalhada

ConfiguraΓ§Γ£o

O projeto usa configuraΓ§Γ£o centralizada em src/anbima_scraper/config/settings.py:

# URLs da ANBIMA
ANBIMA_URLS = {
    "indicators": "https://www.anbima.com.br/informacoes/indicadores/",
    "idka": "http://www.anbima.com.br/informacoes/idka/IDkA-down.asp",
    # ... outras URLs
}

# ConfiguraΓ§Γ΅es de requisiΓ§Γ£o
REQUEST_SETTINGS = {
    "timeout": 30,
    "max_retries": 3,
    "retry_delay": 1,
    # ... outras configuraΓ§Γ΅es
}

Estrutura de Dados

Indicadores ANBIMA

data_referencia,data_captura,indice,descricao,valor
2023-12-15,2023-12-15,selic,Taxa SELIC do BC2,13.75
2023-12-15,2023-12-15,cdi,DI-CETIP3,13.65

IDKA

dt_referencia,no_indexador,no_indice,nu_indice,ret_dia_perc,ret_mes_perc,ret_ano_perc,ret_12_meses_perc,vol_aa_perc,taxa_juros_aa_perc_compra_d1,taxa_juros_aa_perc_venda_d0
2023-12-15,Prefixado,IDkA-P,1234.56,0.12,2.34,15.67,18.90,8.45,13.50,13.60

Logs

O sistema gera logs estruturados em logs/anbima_scraper.log:

2023-12-15 10:30:15 [INFO] anbima_scraper.core.anbima_scraper: Starting ANBIMA scraper for all data sources
2023-12-15 10:30:16 [INFO] anbima_scraper.scrapers.indicators: Scraping ANBIMA indicators
2023-12-15 10:30:18 [INFO] anbima_scraper.scrapers.indicators: Indicators data updated successfully

πŸ—οΈ Estrutura do Projeto

anbima_scraper/
β”œβ”€β”€ src/anbima_scraper/          # CΓ³digo fonte principal
β”‚   β”œβ”€β”€ __init__.py              # Exports principais
β”‚   β”œβ”€β”€ cli.py                   # Interface de linha de comando
β”‚   β”œβ”€β”€ core/                    # Funcionalidades centrais
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ anbima_scraper.py    # Classe principal
β”‚   β”‚   └── scraper.py           # Classe base
β”‚   β”œβ”€β”€ scrapers/                # Scrapers especΓ­ficos
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ indicators.py        # Indicadores ANBIMA
β”‚   β”‚   β”œβ”€β”€ idka.py             # IDKA
β”‚   β”‚   β”œβ”€β”€ ima.py              # IMA
β”‚   β”‚   β”œβ”€β”€ curves.py           # Curvas de juros
β”‚   β”‚   └── debentures.py       # DebΓͺntures
β”‚   β”œβ”€β”€ utils/                   # UtilitΓ‘rios
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ http_client.py      # Cliente HTTP
β”‚   β”‚   β”œβ”€β”€ calendar.py         # UtilitΓ‘rios de calendΓ‘rio
β”‚   β”‚   └── data_processor.py   # Processamento de dados
β”‚   └── config/                  # ConfiguraΓ§Γ΅es
β”‚       β”œβ”€β”€ __init__.py
β”‚       └── settings.py         # ConfiguraΓ§Γ΅es centralizadas
β”œβ”€β”€ data/                        # Dados processados
β”‚   β”œβ”€β”€ raw/                     # Dados brutos
β”‚   └── processed/               # Dados processados
β”œβ”€β”€ tests/                       # Testes
β”‚   β”œβ”€β”€ __init__.py
β”‚   └── test_indicators.py      # Testes dos indicadores
β”œβ”€β”€ examples/                    # Exemplos de uso
β”‚   └── basic_usage.py          # Exemplo bΓ‘sico
β”œβ”€β”€ logs/                        # Logs do sistema
β”œβ”€β”€ pyproject.toml              # ConfiguraΓ§Γ£o do projeto
β”œβ”€β”€ requirements.txt            # DependΓͺncias
β”œβ”€β”€ .pre-commit-config.yaml    # Hooks de pre-commit
β”œβ”€β”€ .gitignore                 # Arquivos ignorados
└── README.md                  # Este arquivo

Arquitetura

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   CLI Module    β”‚    β”‚  Python API     β”‚    β”‚  Configuration  β”‚
β”‚                 β”‚    β”‚                 β”‚    β”‚                 β”‚
β”‚  run-all        β”‚    β”‚  ANBIMAScraper  β”‚    β”‚  settings.py    β”‚
β”‚  run            β”‚    β”‚  run_all()      β”‚    β”‚  URLs           β”‚
β”‚  status         β”‚    β”‚  run_scraper()  β”‚    β”‚  Settings       β”‚
β”‚  list           β”‚    β”‚  get_status()   β”‚    β”‚  Logging        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                       β”‚                       β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚  Base Scraper   β”‚
                    β”‚                 β”‚
                    β”‚  BaseScraper    β”‚
                    β”‚  - HTTP Client  β”‚
                    β”‚  - Calendar     β”‚
                    β”‚  - Data Proc    β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚                       β”‚                       β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Indicators     β”‚    β”‚     IDKA        β”‚    β”‚     Others      β”‚
β”‚                 β”‚    β”‚                 β”‚    β”‚                 β”‚
β”‚  - SELIC        β”‚    β”‚  - Returns      β”‚    β”‚  - IMA          β”‚
β”‚  - CDI          β”‚    β”‚  - Volatility   β”‚    β”‚  - Curves       β”‚
β”‚  - IPCA         β”‚    β”‚  - Rates        β”‚    β”‚  - Debentures   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ§ͺ Testes

Executar Testes

# Executar todos os testes
pytest

# Executar com cobertura
pytest --cov=anbima_scraper

# Executar testes especΓ­ficos
pytest tests/test_indicators.py

# Executar com verbose
pytest -v

Estrutura de Testes

# Exemplo de teste
def test_map_indicator_selic(scraper):
    """Test SELIC indicator mapping."""
    result = scraper._map_indicator("Taxa SELIC do BC2", "DescriΓ§Γ£o")
    assert result == "selic"

πŸ”§ Desenvolvimento

ConfiguraΓ§Γ£o do Ambiente

# Instalar pre-commit hooks
pre-commit install

# Formatar cΓ³digo
black src/ tests/

# Verificar imports
isort src/ tests/

# Verificar tipos
mypy src/

# Verificar linting
flake8 src/ tests/

Adicionando Novos Scrapers

  1. Criar classe do scraper:
from ..core.scraper import BaseScraper

class NewScraper(BaseScraper):
    def __init__(self):
        super().__init__("new_scraper")
    
    def scrape(self, start_date=None, end_date=None):
        # Implementar lΓ³gica do scraper
        pass
  1. Adicionar configuraΓ§Γ΅es:
# Em settings.py
ANBIMA_URLS["new_scraper"] = "https://anbima.com.br/new-endpoint"
FILE_PATHS["new_scraper"] = PROCESSED_DATA_DIR / "new_scraper.csv"
  1. Registrar no scraper principal:
# Em anbima_scraper.py
self.scrapers["new_scraper"] = NewScraper()

πŸ“ˆ Monitoramento e Logs

NΓ­veis de Log

  • DEBUG: InformaΓ§Γ΅es detalhadas para desenvolvimento
  • INFO: InformaΓ§Γ΅es gerais sobre operaΓ§Γ΅es
  • WARNING: Avisos sobre situaΓ§Γ΅es nΓ£o crΓ­ticas
  • ERROR: Erros que impedem operaΓ§Γ£o normal

Exemplo de Logs

2023-12-15 10:30:15 [INFO] anbima_scraper.core.anbima_scraper: Starting ANBIMA scraper for all data sources
2023-12-15 10:30:16 [INFO] anbima_scraper.scrapers.indicators: Scraping ANBIMA indicators
2023-12-15 10:30:17 [DEBUG] anbima_scraper.utils.http_client: Making GET request to: https://www.anbima.com.br/informacoes/indicadores/
2023-12-15 10:30:18 [INFO] anbima_scraper.utils.http_client: Request successful: 200
2023-12-15 10:30:19 [INFO] anbima_scraper.scrapers.indicators: Fetched indicators data: 25 rows
2023-12-15 10:30:20 [INFO] anbima_scraper.scrapers.indicators: Processed indicators data: 25 rows
2023-12-15 10:30:21 [INFO] anbima_scraper.scrapers.indicators: Indicators data updated successfully

🚨 Troubleshooting

Problemas Comuns

1. Erro de ConexΓ£o

Error: Request failed: Connection timeout

SoluΓ§Γ£o: Verificar conectividade com internet e configuraΓ§Γ΅es de proxy.

2. Dados NΓ£o Atualizados

No new data to download

SoluΓ§Γ£o: Usar flag --force para forΓ§ar atualizaΓ§Γ£o.

3. Erro de PermissΓ£o

Permission denied: logs/anbima_scraper.log

SoluΓ§Γ£o: Verificar permissΓ΅es do diretΓ³rio logs/.

4. DependΓͺncias Ausentes

ModuleNotFoundError: No module named 'pandas'

SoluΓ§Γ£o: Instalar dependΓͺncias com pip install -r requirements.txt.

Logs de Debug

Para obter mais informaΓ§Γ΅es sobre problemas:

import logging
logging.getLogger('anbima_scraper').setLevel(logging.DEBUG)

🀝 Contribuição

Como Contribuir

  1. Fork o projeto
  2. Clone seu fork
  3. Crie uma branch para sua feature
  4. Implemente suas mudanΓ§as
  5. Adicione testes
  6. Execute os testes
  7. Commit suas mudanΓ§as
  8. Push para sua branch
  9. Abra um Pull Request

PadrΓ΅es de CΓ³digo

  • Use Black para formataΓ§Γ£o
  • Use isort para organizaΓ§Γ£o de imports
  • Use flake8 para linting
  • Use mypy para type checking
  • Adicione docstrings para todas as funΓ§Γ΅es
  • Escreva testes para novas funcionalidades

Checklist de Pull Request

  • CΓ³digo segue padrΓ΅es de formataΓ§Γ£o
  • Testes passam
  • DocumentaΓ§Γ£o atualizada
  • Logs apropriados adicionados
  • Tratamento de erros implementado

πŸ“„ LicenΓ§a

Este projeto estΓ‘ licenciado sob a LicenΓ§a MIT - veja o arquivo LICENSE para detalhes.

πŸ™ Agradecimentos

  • ANBIMA por disponibilizar os dados financeiros
  • Comunidade Python pelas ferramentas e bibliotecas
  • Contribuidores que ajudaram a melhorar o projeto

πŸ“ž Suporte


⭐ Se este projeto foi ΓΊtil para vocΓͺ, considere dar uma estrela no GitHub!

About

scraper anbima

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published