Script para capturar dados de empresas listadas na B3.
O script consome a API pública do portal de listados da B3, percorre todas as páginas do catálogo de empresas e salva os dados em arquivos JSON.
├── src/
│ ├── config.py URLs, headers e constantes de rate-limit
│ ├── encoder.py Codificação base64 do payload de paginação
│ ├── fetcher.py Requisições HTTP com retry exponencial
│ ├── storage.py Persistência dos JSONs em disco
│ └── main.py CLI + orquestrador com fallback híbrido
├── data/ Arquivos gerados: page_1.json .. page_N.json
└── scraper.log Log da execução
- Python 3.11+
- UV (recomendado) ou pip
git clone <repo>
cd b3-tickers
# Com UV (recomendado)
uv sync
# Ou com pip
python3 -m venv .venv && source .venv/bin/activate
pip install -e .uv run b3-tickers
# Modos disponíveis:
uv run b3-tickers --mode sequential # requisições em série (mais seguro)
uv run b3-tickers --mode parallel # paralelo com semáforo (mais rápido)
uv run b3-tickers --mode auto # tenta paralelo, fallback p/ sequencial- Tenta execução paralela com até 3 requisições simultâneas
- Se houver falhas, retenta as páginas perdidas em modo sequencial
- Ideal como padrão — performance com resiliência
- User-Agent aleatório a cada requisição (5 variações)
- Delay aleatório entre 1-3s (paralelo) ou 2-6s (sequencial)
- Headers realistas (Accept-Language, Referer, Sec-Fetch-*)
- Retry com backoff exponencial (3 tentativas, 2-10s de espera)
Cada página é salva em data/page_{n}.json com a estrutura:
{
"page": { "pageNumber": 1, "pageSize": 120, "totalRecords": 3425, "totalPages": 29 },
"results": [
{
"codeCVM": "900049",
"issuingCompany": "UQMU",
"companyName": "1461 INVESTIMENTOS S.A",
"cnpj": "46639922000144",
"status": "A",
"segment": "Não Classificados",
…
}
]
}