DEV Community

Marcus Andrade
Marcus Andrade

Posted on

8

Automação de Coleta de Dados de CNPJ com Python utilizando ReceitaWS

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)

Enter fullscreen mode Exit fullscreen mode

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.

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay