fabioserpa / CNPJ-full

Utilitário em Python para ler os dados públicos do CNPJ disponibilizados pela Receita Federal e carregá-los em arquivos csv ou sqlite para fácil consumo. Também permite consultas com visualização interativa ou exportação para formatos diversos.
GNU General Public License v3.0
483 stars 190 forks source link

Download dos arquivos #41

Open marcoeuzb opened 4 years ago

marcoeuzb commented 4 years ago

Não seria interessante que o programa fizesse o download dos arquivos tbm?

Enfrento o problema de minha conexão ser lenta, então caso o programa fizesse o download para mim seria útil, facilitando tbm quando eu queira atualizar os dados. Assim, estou escrevendo fazendo um branch próprio com esta funcionalidade, gostaria de saber se existe interesse em adiciona-la à este master.

Nota: peço desculpas por qualquer equivoco, dado minha inexperiência sobre programação.

JacksonOsvaldo commented 4 years ago

Acho que isso já foi resolvido, amigo. Você pode usar o aria2. O Turicas, no repositório do GitHub referente a dados de empresas, fez um código simples pra esse download usando aria2:

#!/bin/bash

set -e

mkdir -p data/download data/output

if [ "$1" = "--use-mirror" ]; then
    USE_MIRROR=true
else
    USE_MIRROR=false
fi

function download_data() {
    CONNECTIONS=4
    DOWNLOAD_URL="https://receita.economia.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/dados-publicos-cnpj"
    FILE_URLS=$(wget --quiet --no-check-certificate -O - "$DOWNLOAD_URL" \
        | grep --color=no DADOS_ABERTOS_CNPJ \
        | grep --color=no ".zip" \
        | sed 's/.*"http:/http:/; s/".*//' \
        | sort)
    MIRROR_URL="https://data.brasil.io/mirror/socios-brasil"

    for url in $FILE_URLS; do
        if $USE_MIRROR; then
            url="$MIRROR_URL/$(basename $url)"
        fi
        time aria2c --auto-file-renaming=false --continue=true -s $CONNECTIONS -x $CONNECTIONS --dir=data/download "$url"
    done
}

download_data
marcoeuzb commented 4 years ago

Realmente simples, porém o programa precisa rodar em ambiente Windows. Mesmo assim obrigado pela dica

elossio commented 4 years ago

Vou testar! Obrigado pela dica.

rafarui commented 4 years ago

Pra compartilhar com vcs... esse script eu fiz pra baixar tudo em python... consegue baixar mais de um arquivo por vez. No ex abaixo 5.

import requests
from joblib import delayed, Parallel
from tqdm import tqdm
def download_from_url(url,chunk_size=1024):
    dst = url.split('/')[-1]
    chunk_size = int(chunk_size)
    file_size = int(requests.head(url).headers["Content-Length"])
    pbar = tqdm( total=file_size, unit='B', unit_scale=True, unit_divisor=1024, desc=url.split('/')[-1])
    req = requests.get(url, stream=True)
    with(open(dst, 'wb')) as f:
        for chunk in req.iter_content(chunk_size=chunk_size):
            if chunk:
                f.write(chunk)
                pbar.update(chunk_size)
    pbar.close()
    return file_size
base_url = 'http://200.152.38.155/CNPJ/DADOS_ABERTOS_CNPJ_{}.zip'
from joblib import parallel_backend
with parallel_backend('threading', n_jobs=5 ):
    Parallel(verbose=70)(delayed(download_from_url )(base_url.format(str(i).zfill(2))) for i in range(1,21,1))
k0al4 commented 4 years ago

Legal! Obrigado!

Denis

Em 27 de jul de 2020, à(s) 22:09, Rafael Rui notifications@github.com escreveu:

 Pra compartilhar com vcs... esse script eu fiz pra baixar tudo em python... consegue baixar mais de um arquivo por vez. No ex abaixo 5.

import requests from joblib import delayed, Parallel from tqdm import tqdm def download_from_url(url,chunk_size=1024): dst = url.split('/')[-1] chunk_size = int(chunk_size) file_size = int(requests.head(url).headers["Content-Length"]) pbar = tqdm( total=file_size, unit='B', unit_scale=True, unit_divisor=1024, desc=url.split('/')[-1]) req = requests.get(url, stream=True) with(open(dst, 'wb')) as f: for chunk in req.iter_content(chunk_size=chunk_size): if chunk: f.write(chunk) pbar.update(chunk_size) pbar.close() return file_size base_url = 'http://200.152.38.155/CNPJ/DADOS_ABERTOS_CNPJ_{}.zip' from joblib import parallel_backend with parallel_backend('threading', n_jobs=5 ): Parallel(verbose=70)(delayed(download_from_url )(base_url.format(str(i).zfill(2))) for i in range(1,21,1)) — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

thiagodma commented 4 years ago

Realmente simples, porém o programa precisa rodar em ambiente Windows. Mesmo assim obrigado pela dica

@marcoeuzb Você pode baixar o Ubuntu no linux. Só colocar "Ubuntu" na Microsoft Store que aparece. Uma vez com ele instalado, vá para o caminho /mnt/c/ que você terá acesso aos arquivos no windows. Aí você pode ir para o diretório de interesse e executar o .sh

marcelo-franceschini commented 3 years ago

O problema é baixar em velocidade descente.. Já tentei mandar e-mail pra eles, mas vocês obviamente, ainda não tive respostas.

andreafonsot commented 3 years ago

Serviço temporariamente indisponível. Tente novamente em alguns instantes.

https://receita.economia.gov.br/orientacao/tributaria/cadastros/cadastro-nacional-de-pessoas-juridicas-cnpj/dados-publicos-cnpj

Isso é normal??

rictom commented 3 years ago

Esse link é o antigo, até o ano passado. Os dados mais atualizados a partir de 2021 estão em https://www.gov.br/receitafederal/pt-br/assuntos/orientacao-tributaria/cadastros/consultas/dados-publicos-cnpj só que estão em outro formato, em csv.

andreafonsot commented 3 years ago

Obrigado pela informação!!