This content originally appeared on DEV Community and was authored by Marcus Andrade
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.
This content originally appeared on DEV Community and was authored by Marcus Andrade
Marcus Andrade | Sciencx (2024-07-08T18:45:34+00:00) Automação de Coleta de Dados de CNPJ com Python utilizando ReceitaWS. Retrieved from https://www.scien.cx/2024/07/08/automacao-de-coleta-de-dados-de-cnpj-com-python-utilizando-receitaws/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.