Skip to main content

bcb-sgs-fetcher: Coletor de séries temporais do BCB SGS

License: MIT Python

Biblioteca Python para download de dados e metadados do SGS (Sistema Gerenciador de Séries Temporais) do Banco Central do Brasil. Expõe dois clientes independentes: um para a API JSON pública e outro para raspagem HTML do portal SGS.

Fonte dos dados: BCB SGS — Sistema Gerenciador de Séries Temporais

Instalação

pip install git+https://github.com/Quantilica/bcb-sgs-fetcher.git

Uso Rápido

Buscar dados de uma série temporal

from bcb_sgs_fetcher import SgsDataClient

with SgsDataClient() as client:
    points = client.fetch_series_data(
        series_id=1,            # Dólar/Real (USD/BRL)
        frequency_acronym="D",  # Diária — usa estratégia retroativa ano a ano
    )

for p in points[:3]:
    print(p.date, p.value)

points é uma list[SeriesPoint] onde cada item contém series_id, date, date_end e value (Decimal | None).

Buscar metadados de uma série

from bcb_sgs_fetcher import (
    ScraperClient,
    parse_metadata_basic,
    parse_metadata_full,
)

with ScraperClient() as scraper:
    htmls = scraper.request_metadata_html(series_id=1)
    basic = parse_metadata_basic(htmls["basic"])
    full = parse_metadata_full(htmls["full"])

print(basic.name, basic.frequency)
print(full.last_update, len(full.provider_data))

CLI

Os comandos são agrupados em dois eixos: series (operações por série) e catalogo (catálogo de metadados).

Via quantilica-cli

# Baixar dados de uma série
quantilica bcb-sgs series sync 1 -f D -o ./dados

# Baixar metadados de uma série
quantilica bcb-sgs series metadata 1 -o ./dados

# Buscar séries por texto
quantilica bcb-sgs series search "câmbio"

# Sincronizar o catálogo completo de metadados
quantilica bcb-sgs catalogo sync

CLI standalone

# Baixar dados de uma série
bcb-sgs-fetcher series sync 1 --frequency D --output ./dados

# Baixar metadados de uma série específica
bcb-sgs-fetcher series metadata 1 --output ./dados

# Buscar séries por texto
bcb-sgs-fetcher series search "taxa selic"

Sincronização completa do catálogo de metadados

Para baixar e processar metadados de todas as séries do SGS, use o comando catalogo sync:

bcb-sgs-fetcher catalogo sync -o /data/bcb-sgs

Ele executa automaticamente os quatro passos em sequência, cada um com sua própria sessão HTTP:

  1. Baixa a árvore de grupos e as listagens de séries por grupo
  2. Baixa as páginas de séries desativadas
  3. Extrai todos os IDs dos HTMLs baixados
  4. Baixa e parseia os metadados de cada série

Todos os dados são gravados em <output>/bcb-sgs_YYYY-MM/. O pipeline é retomável: arquivos já existentes no disco são ignorados em todos os passos, então basta reexecutar o mesmo comando após uma interrupção.

Para ajustar o intervalo entre requisições (padrão: 10 segundos):

bcb-sgs-fetcher catalogo sync -o /data/bcb-sgs --sleeptime 5

Passos individuais

Se precisar executar um passo isoladamente (ex.: após corrigir falhas parciais), os subcomandos individuais aceitam os mesmos parâmetros:

# Apenas a árvore de grupos
bcb-sgs-fetcher catalogo arvore-grupos -o /data/bcb-sgs

# Apenas séries desativadas
bcb-sgs-fetcher catalogo series-desativadas -o /data/bcb-sgs

# Apenas extração de IDs (grava em <output>/bcb-sgs_YYYY-MM/ids.txt)
bcb-sgs-fetcher catalogo extract-ids -o /data/bcb-sgs

# Apenas metadados, a partir de um arquivo de IDs
bcb-sgs-fetcher catalogo metadata-bulk \
    --ids-file /data/bcb-sgs/bcb-sgs_YYYY-MM/ids.txt \
    -o /data/bcb-sgs

Baixar dados das séries

Por padrão, series sync baixa os dados (a série temporal) de todas as séries — enumeradas a partir das listagens já baixadas pelo catalogo sync. A periodicidade de cada série é lida das listagens, então séries diárias já usam a estratégia retroativa automaticamente. O download é concorrente (--workers) e retomável (--skip-existing).

# Todas as séries (padrão) — requer um catálogo já sincronizado
bcb-sgs-fetcher series sync --skip-existing --workers 5 -o /data/bcb-sgs

# Estreitando: apenas uma série
bcb-sgs-fetcher series sync 1 --frequency D -o /data/bcb-sgs

# Estreitando: apenas os IDs de um arquivo
bcb-sgs-fetcher series sync \
    --ids-file /data/bcb-sgs/bcb-sgs_YYYY-MM/ids.txt \
    --skip-existing --workers 5 -o /data/bcb-sgs

Por padrão as listagens são procuradas em <output>/bcb-sgs_YYYY-MM; use --catalog-dir para apontar outro mês. Os dados são gravados em <output>/data/series_{id}@YYYYMMDDTHHMMSS.json (nome versionado por data-hora — cada coleta gera um snapshot novo, então re-baixar a mesma série no mesmo dia não sobrescreve a anterior). --skip-existing pula séries que já têm um snapshot do dia. Use --period latest para baixar só as últimas 20 observações.

API Python

Navegar a árvore de grupos

from bcb_sgs_fetcher import ScraperClient, extract_arvore_grupos, extract_table_data
from bs4 import BeautifulSoup

with ScraperClient() as scraper:
    html = scraper.get_grupos_principais()
    soup = BeautifulSoup(html, "lxml")
    grupos = extract_arvore_grupos(soup.find("table"))

Cache em disco

bcb_sgs_fetcher.storage é a fonte única do layout em disco do ecossistema bcb-sgs (o bcb-sgs-sql consome este mesmo módulo). É construído sobre quantilica-core (escrita atômica, stamp_filename, StampedDataRepository).

from pathlib import Path
from bcb_sgs_fetcher import storage

root = Path("/data/bcb-sgs")

# Observações: snapshot versionado por data-hora (não sobrescreve)
storage.write_series_data(root, 1, rows)          # data/series_1@...T....json
latest = storage.latest_series_file(root, 1)      # snapshot mais recente
rows = storage.read_series_data(latest)

# Metadados particionados por mês (combinado + HTML bruto)
storage.write_metadata(root, 1, basic=b, full=f, html_basic=hb, html_full=hf)
combined = storage.read_combined_metadata(root, 1)  # {"basic": ..., "full": ...}

Fontes de Dados

Cliente URL Tipo
SgsDataClient api.bcb.gov.br/dados/serie/bcdata.sgs.{id}/dados API JSON pública
ScraperClient www3.bcb.gov.br/sgspub Raspagem HTML

Desenvolvimento

git clone https://github.com/Quantilica/bcb-sgs-fetcher.git
cd bcb-sgs-fetcher
uv sync --dev
uv run pytest

Licença

MIT — veja LICENSE.

Metadata

Release files for bcb-sgs-fetcher 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bcb-sgs-fetcher 0.5.0
File Size Uploaded
bcb_sgs_fetcher-0.5.0.tar.gz 38.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bcb-sgs-fetcher 0.5.0
File Interpreter ABI Platform
bcb_sgs_fetcher-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 75.0 kB

Release files / bcb_sgs_fetcher-0.5.0.tar.gz

Download URL bcb_sgs_fetcher-0.5.0.tar.gz
Size 38.1 kB
Tags Source
SHA-256 checksum
How to use checksums
a3a13e331bf87084c41f4116b67e5ba2983cad5ce480f469eccb3e0495b51507
BLAKE2b-256 checksum
How to use checksums
b4f47f47ac5aee538703c5f41574b88bb3fef377efed1112dae0a88ccce59a7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.

Transparency log

Release files / bcb_sgs_fetcher-0.5.0-py3-none-any.whl

Download URL bcb_sgs_fetcher-0.5.0-py3-none-any.whl
Size 36.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
233bbd6a3926b73ce35f20a50099188f061cae30daf6cb51efb9e3e943bf3d22
BLAKE2b-256 checksum
How to use checksums
9ac3a18ef2f9bee6ade07002edb46cc17bba11187bfc717e4edb78c5d617392a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page