Automação de Coleta de Dados de CNPJ com Python utilizando ReceitaWS
Published: 2024-07-08 18:45:34

Neste artigo, vamos explorar como automatizar a coleta de dados de CNPJ usando Python. Utilizaremos a API da ReceitaWS para obter informações detalhadas sobre cada CNPJ e armazenaremos esses dados em um arquivo CSV. Este guia é voltado para desenvolvedores que desejam automatizar a extração e armazenamento de informações de CNPJ.

Bibliotecas Utilizadas
requests: Para fazer requisições HTTP à API da ReceitaWS.
pandas: Para manipulação e formatação de dados.
time: Para controlar o intervalo entre as requisições e respeitar os limites da API.
Código Completo

Utilizando https://receitaws.com.br

```
import requests
import pandas as pd
import time

def get_cnpj_data(cnpj):
    """
    Faz uma requisição à API da ReceitaWS para obter dados do CNPJ.
    
    Args:
        cnpj (str): O número do CNPJ a ser consultado.
        
    Returns:
        dict: Dados do CNPJ em formato JSON se a requisição for bem-sucedida.
        None: Se a requisição falhar.
    """
    url = f"https://receitaws.com.br/v1/cnpj/{cnpj}"
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        return None

def process_cnpj_data(cnpj_list):
    """
    Processa uma lista de CNPJs, obtendo os dados de cada um e respeitando o limite de requisições da API.
    
    Args:
        cnpj_list (list): Lista de números de CNPJ a serem consultados.
        
    Returns:
        list: Lista de dados de CNPJ obtidos da API.
    """
    data = []
    for cnpj in cnpj_list:
        cnpj_data = get_cnpj_data(cnpj)
        if cnpj_data:
            data.append(cnpj_data)
        time.sleep(20)  # Espera 20 segundos entre cada requisição para respeitar o limite de 3 requisições por minuto
    
    return data

def format_data_for_sql(data):
    """
    Formata os dados de CNPJ em um DataFrame do pandas, adequado para exportação.
    
    Args:
        data (list): Lista de dados de CNPJ obtidos da API.
        
    Returns:
        pandas.DataFrame: DataFrame com os dados formatados.
    """
    df_rows = []
    for item in data:
        row = {
            'cnpj': item.get('cnpj', ''),
            'nome': item.get('nome', ''),
            'fantasia': item.get('fantasia', ''),
            'logradouro': item.get('logradouro', ''),
            'numero': item.get('numero', ''),
            'complemento': item.get('complemento', ''),
            'cep': item.get('cep', ''),
            'bairro': item.get('bairro', ''),
            'municipio': item.get('municipio', ''),
            'uf': item.get('uf', ''),
            'telefone': item.get('telefone', ''),
            'email': item.get('email', ''),
        }
        df_rows.append(row)
    
    df = pd.DataFrame(df_rows)
    return df

def save_to_csv(df, file_name='cnpj_data.csv'):
    """
    Salva o DataFrame em um arquivo CSV.
    
    Args:
        df (pandas.DataFrame): DataFrame contendo os dados de CNPJ.
        file_name (str): Nome do arquivo CSV a ser salvo.
    """
    df.to_csv(file_name, index_label='ID')

if __name__ == "__main__":
    cnpj_list = [
        '10869047000140', #CNPJ GERADO PELO 4DEVS
        # Adicione mais CNPJs conforme necessário
    ]

    cnpj_data = process_cnpj_data(cnpj_list)
    df = format_data_for_sql(cnpj_data)
    save_to_csv(df)

```
Explicação do Código
Função get_cnpj_data(cnpj):

Faz uma requisição à API da ReceitaWS com o CNPJ fornecido.
Retorna os dados em formato JSON se a requisição for bem-sucedida, ou None se falhar.
Função process_cnpj_data(cnpj_list):

Itera sobre uma lista de CNPJs, chamando get_cnpj_data para cada CNPJ.
Respeita o limite de requisições da API, esperando 20 segundos entre cada requisição.
Retorna uma lista de dados de CNPJ.
Função format_data_for_sql(data):

Formata os dados de CNPJ em um DataFrame do pandas, com colunas relevantes para armazenar informações.
Prepara os dados para exportação.
Função save_to_csv(df, file_name='cnpj_data.csv'):

Salva o DataFrame em um arquivo CSV, com o nome especificado.
Bloco if __name__ == "__main__"::

Define uma lista de CNPJs para processamento.
Chama as funções para processar os dados e salvar em um arquivo CSV.