Para uma apresentacao em video 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 suporte para verificação remota do tamanho do arquivo, evitando downloads redundantes.
- Processamento Eficiente de Dados: Lida com grandes conjuntos de dados particionados e os consolida em uma única saída.
- Formatos de Exportação Flexíveis: Os dados podem ser exportados nos formatos CSV, Parquet, JSON ou Feather para fácil integração com bancos de dados e plataformas de análise.
- 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
- Python 3.8+
- Os seguintes pacotes Python:
- pandas
- pyyaml
- requests
- bs4 (BeautifulSoup)
- tqdm
Antes de executar os scripts, certifique-se de que o arquivo config.yaml
esteja configurado de acordo com o seu ambiente. Esse arquivo contém caminhos para armazenamento de dados, logs e configurações de formato para exportação de dados.
Exemplo de config.yaml:
# URL base para o conjunto de dados do CNPJ
base_url: 'http://200.152.38.155/CNPJ/dados_abertos_cnpj/'
# Configurações de CSV
csv_sep: ';'
csv_dec: ','
csv_quote: '"'
csv_enc: 'cp1252'
# Formato de exportação: Escolha entre 'csv', 'parquet', 'json' ou 'feather'
export_format: 'parquet'
# Definições de tipo de dado para cada tabela
dtypes:
empresas:
cnpj_basico: "str"
razao_social: "str"
natureza_juridica: "str"
qualificacao_do_responsavel: "str"
capital_social: "str"
porte_da_empresa: "str"
ente_federativo_resposavel: "str"
estabelecimentos:
cnpj_basico: "str"
cnpj_ordem: "str"
cnpj_dv: "str"
identificador_matriz_filial: "str"
nome_fantasia: "str"
situacao_cadastral: "str"
data_situacao_cadastral: "str"
motivo_situacao_cadastral: "str"
nome_da_cidade_no_exterior: "str"
pais: "str"
data_de_inicio_da_atividade: "str"
cnae_fiscal_principal: "str"
cnae_fiscal_secundaria: "str"
tipo_de_logradouro: "str"
logradouro: "str"
numero: "str"
complemento: "str"
bairro: "str"
cep: "str"
uf: "str"
municipio: "str"
situacao_cadastral: "str"
ddd1: "str"
telefone1: "str"
ddd2: "str"
telefone2: "str"
ddd_do_fax: "str"
fax: "str"
correio_eletronico: "str"
situacao_especial: "str"
data_da_situacao_especial: "str"
...
Para iniciar o processo de extração de dados, execute o script cnpj_extractor.py
. Este script fará o download do conjunto de dados do CNPJ para o mês mais recente disponível, verificará o tamanho dos arquivos e evitará o re-download de arquivos que já existam.
Execute a extração:
python cnpj_extractor.py
Isso irá:
- Baixar os conjuntos de dados particionados do mês mais recente disponível no servidor.
- Salvá-los na pasta
data_incoming
.
Após a extração dos dados, a segunda parte envolve a unificação das tabelas particionadas em conjuntos de dados consolidados.
Para realizar a unificação, execute o script cnpj_merger.py
. Esse script lê os arquivos de dados, os processa e salva os dados unificados na pasta data_outgoing
no formato especificado no config.yaml
.
Execute o processo de unificação:
python cnpj_merger.py
Isso irá:
- Unir os arquivos de dados particionados (por exemplo, Empresas, Estabelecimentos, Sócios) em um único conjunto de dados.
- Salvar o conjunto de dados unificado na pasta
data_outgoing
no formato que você preferir.
Você pode facilmente alterar o formato dos arquivos exportados (por exemplo, CSV, Parquet, JSON) modificando o valor de export_format
no config.yaml
. Os formatos suportados são:
- csv
- parquet
- json
- feather
Os logs são gerados na pasta logs
, com detalhes sobre os processos de download, extração e unificação. Isso ajuda a acompanhar o progresso das atividades de extração e unificação de dados.
Contribuições são bem-vindas! Se você encontrar bugs ou tiver sugestões para novos recursos ou melhorias, sinta-se à vontade para enviar uma issue ou abrir um pull request.
Este projeto é licenciado sob a Licença MIT.
- Tratamento de Erros: Melhorias adicionais podem ser incluídas, como mecanismos de tentativa de novo download ou tratamento de arquivos parcialmente baixados.
- Processamento Paralelo: O processo de unificação também pode ser otimizado utilizando técnicas de processamento paralelo para lidar com grandes volumes de dados.