📘 English version available here → README.en.md
Para uma apresentação em vídeo deste projeto, acesse: CNPJ Data Extractor - Video Tutorial
O CNPJ Data Extractor é um projeto de código aberto que automatiza o processo de download, extração e transformação de conjuntos de dados do CNPJ (Cadastro Nacional da Pessoa Jurídica) a partir de fontes públicas disponíveis. O projeto é dividido em duas partes:
- Extração de Dados: Baixar e extrair automaticamente os conjuntos de dados do CNPJ particionados.
- Unificação de Dados: Combinar as tabelas particionadas em conjuntos de dados consolidados para processamento ou análise posterior.
- Download Automático de Dados: Download multithreaded dos conjuntos de dados com verificação de tamanho dos arquivos remotos, evitando downloads redundantes.
- Processamento Eficiente de Dados: Lida com grandes volumes de dados particionados e os consolida em uma única saída.
- Formatos de Exportação Flexíveis: Suporte a CSV e Parquet.
- Configuração Modular: Caminhos, logs e opções de exportação são facilmente ajustáveis por meio de um arquivo de configuração (
config.yaml).
.
├── config
│ └── config.yaml # Arquivo de configuração para caminhos, formatos e tipos de dados
├── data_incoming # Pasta para arquivos ZIP de dados recebidos
├── data_outgoing # Pasta para os dados processados de saída
├── logs # Pasta para arquivos de log
├── scripts # Pasta para scripts em Python
│ ├── cnpj_extractor.py # Script para extração de dados (parte 1)
│ └── cnpj_merger.py # Script para unificação das tabelas particionadas (parte 2)
├── README.md # Documentação do projeto
└── execute_model.bat # Exemplo de script batch para executar o projeto completo (configure o ambiente antes)
- Python 3.12+
git clone https://github.com/jmfeck/cnpj-data-extractor.git
cd cnpj-data-extractor
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txtAntes de executar os scripts, certifique-se de que o arquivo config.yaml esteja configurado corretamente. Esse arquivo contém a URL base, parâmetros de leitura de CSV, tipo de exportação e os tipos de dados esperados para cada tabela.
Exemplo de config.yaml:
# URL base para o conjunto de dados do CNPJ
base_url: 'https://arquivos.receitafederal.gov.br/dados/cnpj/dados_abertos_cnpj'
# Configurações de CSV
csv_sep: ';'
csv_dec: ','
csv_quote: '"'
csv_enc: 'latin1'
# Formato de exportação: 'csv' ou 'parquet'
export_format: 'parquet'
# Definições de tipo de dado para cada tabela
dtypes:
empresa:
cnpj_basico: "str"
razao_social: "str"
natureza_juridica: "str"
qualificacao_responsavel: "str"
capital_social: "float"
porte_empresa: "str"
ente_federativo_responsavel: "str"Para iniciar o processo de extração, execute o script cnpj_extractor.py.
Esse script irá:
- Acessar a URL base definida no
config.yaml - Identificar a pasta mais recente com base no padrão
AAAA-MM - Listar todos os arquivos
.zipdisponíveis nessa pasta - Verificar se cada arquivo já foi baixado anteriormente (com base no tamanho)
- Fazer o download apenas dos arquivos necessários, utilizando múltiplos threads para acelerar o processo
- Salvar todos os arquivos na pasta
data_incoming/
Execute com:
python cnpj_extractor.pyApós o download dos arquivos, execute cnpj_merger.py para realizar o processamento dos dados.
Esse script irá:
- Localizar todos os arquivos
.zipna pastadata_incoming/ - Identificar o tipo de cada arquivo com base no prefixo (por exemplo,
empresa,estabelecimento, etc.) - Extrair o conteúdo de cada
.zip(espera-se que contenha apenas um.csv) - Ler os dados aplicando os tipos definidos no
config.yaml - Unificar os dados de cada tipo em um único arquivo
- Exportar os dados consolidados para a pasta
data_outgoing/, no formato especificado (csvouparquet)
Execute o script com:
python cnpj_merger.pyAtualmente, os formatos de exportação disponíveis são:
csvparquet
Outros formatos como JSON ou Feather podem ser adicionados no futuro.
Os arquivos de log são gerados automaticamente na pasta logs/, permitindo acompanhar erros, tempo de execução e progresso geral.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.
Este projeto está licenciado sob a Licença MIT.