Python – Automatizando Coleta e Extração de Dados Zip na Web

Aprenda a automatizar coleta e extração de Dados ZIP na Web utilizando Python

Para pesquisas, análises de mercado ou simplesmente por curiosidade, a coleta e extração de dados na web tornaram-se ferramentas indispensáveis nos dias de hoje. A linguagem de programação Python desempenha um papel significativo, facilitando grandemente essas tarefas. No entanto, para os iniciantes, esse processo pode parecer desafiador.

Neste tutorial, vamos criar juntos uma automatização para coleta de dados utilizando a linguagem Python. Não nos limitaremos apenas à coleta; estaremos explorando também a extração de dados de um arquivo ZIP hospedado na web.

Com passos simples e transparentes, você será capaz de automatizar a coleta e extração de arquivos, tornando essas tarefas parte integrante do seu dia a dia. Ao concluir este tutorial, a automação se transformará em sua aliada confiável, simplificando suas tarefas diárias de maneira eficaz e descomplicada.

Vamos lá?

Bibliotecas Necessárias

O ponto inicial consiste na instalação das bibliotecas essenciais para o desenvolvimento deste projeto. As seguintes ferramentas serão empregadas

  1. os:
    • Essa biblioteca fornece funcionalidades relacionadas ao sistema operacional. No contexto do código, o módulo os pode ser utilizado para realizar operações como manipulação de diretórios e caminhos de arquivos.
  2. requests:
    • A biblioteca requests é amplamente utilizada para realizar requisições HTTP. No código, ela pode ser empregada para baixar arquivos da web, sendo fundamental para a coleta de dados online.
  3. zipfile:
    • O módulo zipfile permite trabalhar com arquivos ZIP. Ele desempenha um papel crucial no processo de extração dos dados contidos no arquivo ZIP baixado, garantindo que a automação seja completa e eficiente.

Importação das Bibliotecas no Python

Para efetuar a importação das bibliotecas necessárias, utilize o código fornecido abaixo. Se não estiver familiarizado com o processo de instalação de bibliotecas, clique aqui para obter orientações passo a passo.

import os
import requests
import zipfile

Sobre a Base de Dados

Com as bibliotecas devidamente instaladas, o próximo passo é acessar o link web no qual o arquivo está armazenado. Neste tutorial, utilizaremos os dados disponíveis nesse link. O arquivo abriga uma base fictícia que simula os resultados de uma pesquisa, buscando entender as preferências dos participantes em relação a uma variedade de temas, como hobbies, animais, clima e bebidas. Abaixo segue uma prévia do arquivo descompactado.

A pesquisa está organizada por dia, significando que cada dia inclui uma entrevista contendo um ou mais participantes. Este arquivo engloba um total de 363 pesquisas conduzidas ao longo do ano de 2020.

Acessando a URL

Compreendida a estrutura da base de dados, o próximo passo consiste em criar uma requisição por meio da URL para acessar e coletar os dados. Utilize o código abaixo para isso

url = 'https://github.com/ProfLeandroLessa/classroom-datasets/raw/master/CDD/TP/pesquisa_preferencias.zip'

response = requests.get(url)

Temos:

  1. Definição da URL:
    • A variável url contém o endereço da web de onde o arquivo ZIP será baixado.
  2. Requisição HTTP:
    • A função requests.get(url) é utilizada para realizar uma requisição HTTP para a URL especificada, e a resposta é armazenada na variável response.

Verificando e Criando o Diretório de Armazenamento

Após efetuar a requisição da URL no site, é crucial verificar seu status para validar sua integridade e criar o caminho onde os dados serão armazenados. Neste tutorial, pressupomos que a pasta ‘dados_pesquisa’ já está previamente criada no diretório C:. Contudo, caso deseje aprender a criar a pasta automaticamente, clique aqui.

diretorio_destino = 'C:\dados_pesquisa'
if response.status_code == requests.codes.OK:
        nome_arquivo_zip = url.split('/')[-1]
        caminho_arquivo_zip = os.path.join(diretorio_destino, nome_arquivo_zip)

Assim temos:

  1. Definição do Diretório de Destino:
    • A variável diretorio_destino indica o local no sistema de arquivos onde o arquivo ZIP será salvo após o download. Nesse caso o diretório é uma pasta armazenada no diretório C: do Windows.
  2. Verificação de Resposta Bem-sucedida:
    • O código verifica se a resposta da requisição possui o código de status HTTP 200 (OK), indicando que a requisição foi bem-sucedida.
  3. Extração do Nome do Arquivo e Definição do Caminho do Arquivo ZIP:
    • Se a resposta foi bem-sucedida, o código extrai o nome do arquivo ZIP da URL (parte após a última barra) e, em seguida, cria o caminho completo do arquivo ZIP utilizando os.path.join(diretorio_destino, nome_arquivo_zip).
    • Neste contexto, o nome do arquivo é combinado ao diretório de armazenamento. Como exemplo, o caminho completo para o arquivo destino seria: C:\dados_pesquisa\pesquisa_preferencias.zip.

Realizando o Download do Arquivo

Com o diretório de destino devidamente configurado, o próximo passo é realizar o download do arquivo. Utilize o código abaixo para executar essa operação.

with open(caminho_arquivo_zip, 'wb') as arquivo:
            arquivo.write(response.content)
            print("Donwload finalizado. Salvo em: {}".format(caminho_arquivo_zip))

Aqui temos:

  1. Abertura e Escrita do Arquivo:
    • O código abre um arquivo no caminho especificado (caminho_arquivo_zip) no modo de escrita binária ('wb').
    • O conteúdo da resposta HTTP (response.content), que é o conteúdo binário do arquivo ZIP, é então gravado nesse arquivo recém-aberto.
  2. Impressão do Status do Download:
    • Após a escrita bem-sucedida do arquivo, uma mensagem é impressa indicando que o download foi concluído e especificando o local onde o arquivo foi salvo (caminho_arquivo_zip).

Descompactando o Arquivo

Com o arquivo devidamente baixado no seu diretório, o próximo e último passo consiste em realizar a extração do seu conteúdo. Utilize o código abaixo para realizar esta operação.

with zipfile.ZipFile(caminho_arquivo_zip, 'r') as zip_ref:
    zip_ref.extractall(diretorio_destino)

print(f"Arquivo ZIP descompactado em: {diretorio_destino}")
  1. Abertura e Extração do Arquivo ZIP
    • Nesta seção, um contexto with é utilizado para garantir a correta manipulação do arquivo ZIP. O arquivo ZIP especificado em caminho_arquivo_zip é aberto no modo de leitura ('r').
    • Em seguida, o método extractall é aplicado ao objeto ZipFile (zip_ref), descompactando todos os arquivos do arquivo ZIP para o diretório fornecido em diretorio_destino.
  2. Impressão do Status da Extração:
    • Após a extração bem-sucedida, uma mensagem é impressa indicando que o arquivo ZIP foi descompactado com sucesso. O caminho do diretório onde os arquivos foram extraídos (diretorio_destino) é incluído na mensagem para fornecer informações sobre a localização dos dados recém-extraídos.

Pronto! Agora, todos os arquivos foram descompactados e estão devidamente armazenados no diretório.

Conclusão


Este tutorial realizou a automação da coleta e descompactação de dados a partir de um arquivo ZIP hospedado na web. Desde a validação da URL até o download, armazenamento e descompactação eficiente, cada passo foi detalhadamente explorado. Ao empregar as bibliotecas requests e zipfile em conjunto com o Python, agora você está tem conhecimentos práticos para simplificar tarefas rotineiras de manipulação de dados.

Incorporar essas habilidades ao seu repertório oferece um caminho mais ágil e eficiente na jornada da coleta de dados, capacitando-o a explorar informações valiosas com facilidade. Experimente adaptar esses conceitos aos seus projetos específicos e aproveite os benefícios da automação na gestão de dados.

Se este conteúdo foi útil e você deseja automatizar a extração em tempo de execução ou explorar outras melhorias, clique aqui.

Compartilhe essa dica com seus amigos que podem se dar bem com essas estratégias de automação. A jornada para gerenciar dados de forma eficiente está só começando. Aproveite cada descoberta! 🚀

Compartilhe!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *