Voltar ao blogue
Guias
Gabriel CiociLast updated on Mar 31, 20268 min read

Descarregue páginas da Web e ficheiros com facilidade usando Python e o wget

Descarregue páginas da Web e ficheiros com facilidade usando Python e o wget

Está cansado de descarregar manualmente páginas web e ficheiros? Gostaria que houvesse uma forma mais fácil de obter os dados de que precisa? Não procure mais! Neste artigo, vou mostrar-lhe como utilizar o Python e a ferramenta de linha de comandos wget para automatizar o processo.

Neste artigo, irá descobrir como utilizar o Python e o wget para automatizar o processo de download da web, ao mesmo tempo que aprende sobre as capacidades e limitações do wget, bem como sobre ferramentas alternativas para web scraping.

Porquê Python?

O Python é uma linguagem de programação poderosa e popular, utilizada em vários campos, tais como a automatização, a ciência de dados e o desenvolvimento de aplicações. É fácil de aprender e possui uma vasta biblioteca de módulos e frameworks que ampliam as suas capacidades.

Porquê o wget?

O wget é uma ferramenta de linha de comandos que permite descarregar ficheiros da Internet. Está amplamente disponível na maioria dos sistemas do tipo Unix, incluindo Linux e macOS. O wget é uma ferramenta versátil que pode ser utilizada para descarregar ficheiros individuais, vários ficheiros e até diretórios inteiros.

Eis algumas das principais funcionalidades do wget:

  • Transferir ficheiros da Internet: O wget pode ser utilizado para transferir ficheiros da Internet, incluindo páginas web, imagens e outros tipos de ficheiros.
  • Opções de download personalizáveis: O Wget permite especificar várias opções para personalizar os seus downloads, tais como o diretório onde guardar o ficheiro, o nome do ficheiro e se deve substituir ficheiros existentes.
  • Retomar transferências interrompidas: Se uma transferência for interrompida, o wget pode retomá-la a partir do ponto em que ficou, poupando tempo e largura de banda.
  • Transferência recursiva: o wget pode ser utilizado para transferir um site ou diretório inteiro, seguindo links de forma recursiva.
  • Suporte para HTTP, HTTPS e FTP: O Wget suporta vários tipos de protocolos de Internet, incluindo HTTP, HTTPS e FTP, tornando-o uma ferramenta versátil para fazer downloads a partir de diferentes tipos de servidores.
  • Disponível na maioria dos sistemas semelhantes ao Unix: O wget está amplamente disponível na maioria dos sistemas semelhantes ao Unix, incluindo Linux e macOS, o que facilita a sua utilização numa variedade de plataformas.

Porquê usar o wget com Python?

O Python e o wget podem ser combinados para automatizar o processo de descarregar páginas web e ficheiros, poupando tempo e esforço. O wget pode ser personalizado através do Python, e tarefas de web scraping ou de descarregamento de ficheiros podem ser integradas em scripts Python existentes.

Existem várias razões pelas quais se pode optar por utilizar o wget com Python:

  • Automatização: Ao utilizar o wget com Python, pode automatizar o processo de descarregar ficheiros da Internet. Isto pode poupar tempo e esforço, especialmente se precisar de descarregar um grande número de ficheiros ou sites.
  • Personalização: O Wget permite-lhe especificar várias opções para personalizar os seus downloads, tais como o diretório onde guardar o ficheiro, o nome do ficheiro e se deve substituir ficheiros existentes. Ao utilizar o wget com Python, pode definir estas opções programaticamente e personalizar os seus downloads de acordo com as suas necessidades.
  • Facilidade de utilização: O Python é conhecido pela sua simplicidade e legibilidade, tornando-o uma linguagem fácil de aprender e utilizar. Ao utilizar o wget com Python, pode aproveitar o poder do Python para facilitar as tarefas de web scraping e de transferência de ficheiros.
  • Escalabilidade: O Python é uma linguagem escalável, capaz de lidar com grandes quantidades de dados. Ao utilizar o wget com Python, pode ampliar as suas tarefas de web scraping ou de transferência de ficheiros para lidar com conjuntos de dados maiores.

Introdução

Agora que discutimos os benefícios individuais e combinados do Python e do wget, vamos passar à parte da escrita de código.

Instalação do wget

Certifique-se de que o wget está instalado no seu computador. Se o seu sistema operativo de eleição for o Linux, já o tem instalado.

  • Se for utilizador do Windows, pode descarregar o ficheiro binário a partir desta página. Certifique-se de que adiciona o caminho do ficheiro binário à variável de ambiente PATH. Outra opção é utilizar o WSL (Windows Subsystem for Linux). Leia mais sobre o assunto aqui.
  • Se for utilizador de Mac, instale o wget utilizando o brew

Não se esqueça de consultar a extensa documentação do wget aqui.

Instalar o Python

Obtenha a versão mais recente do Python no site oficial e siga as instruções de instalação para a sua plataforma. Após a instalação, pode verificar a versão com este comando:

python3 --version

Executar comandos do sistema em Python

O módulo `subprocess` no Python permite-lhe executar comandos do sistema e capturar a sua saída. É uma forma poderosa e flexível de interagir com o sistema operativo a partir dos seus scripts Python.

Para utilizar o módulo `subprocess`, terá primeiro de o importar para o seu script Python. Em seguida, pode utilizar a função `subprocess.run()` para executar um comando do sistema e capturar a sua saída.

A função `run()` recebe o comando a ser executado como uma string e retorna um objeto `CompletedProcess`, que contém o código de saída, stdout e stderr do comando.

Eis um exemplo da utilização da função `subprocess.run()` para executar o comando ls, que lista os ficheiros num diretório:

import subprocess

result = subprocess.run(['ls', '-l'])

print(result.stdout)

Execute este código com o comando python3 main.py. O resultado deverá ser semelhante a este.

total 4

-rw-r--r-- 1 dan dan 80 Jan 6 18:58 main.py

None

Transferência com o wget

Descarregar um ficheiro

Vamos começar por descarregar o logótipo da WebScrapingAPI. Substitua a lista de argumentos por `wget` e o URL do logótipo. O comando ficará assim:

result = subprocess.run(['wget', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

O script irá devolver o seguinte resultado:

--2023-01-06 19:06:32-- https://www.webscrapingapi.com/images/logo/logo-white.svg

Resolving www.webscrapingapi.com (www.webscrapingapi.com)... 76.76.21.61, 76.76.21.98

Connecting to www.webscrapingapi.com (www.webscrapingapi.com)|76.76.21.61|:443... connected.

HTTP request sent, awaiting response... 200 OK

Length: 5391 (5.3K) [image/svg+xml]

Saving to: 'logo-white.svg'

logo-white.svg 100%[====================================================================================================================================================================>] 5.26K --.-KB/s in 0.06s

2023-01-06 19:06:33 (91.6 KB/s) - 'logo-white.svg' saved [5391/5391]

None

A partir do resultado, podemos ver como o `wget` resolve o nome de domínio, liga-se ao domínio, recebe um código de resposta `200 OK`, determina o tamanho do ficheiro (5,3 k) e começa a guardar o ficheiro localmente com o nome `logo-white.svg`.

Pode verificar a pasta do projeto para ver se o ficheiro `logo-white.svg` está lá.

Descarregar para um diretório

Pode descarregar o ficheiro para um diretório personalizado utilizando o sinalizador `-P`. Vamos atualizar o script e executá-lo para ver os resultados:

result = subprocess.run(['wget', '-P', 'images', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

A saída é praticamente a mesma, com a única diferença de o ficheiro ser guardado no diretório `./images/`.

Definir o nome do ficheiro descarregado

Usando o sinalizador `-O`, pode especificar um novo nome para o ficheiro descarregado. Vamos experimentar:

result = subprocess.run(['wget', '-O', 'named-logo.svg', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Verifique se o ficheiro `named-logo.svg` se encontra na pasta do projeto.

Descarregar o ficheiro se a versão remota for mais recente

Pode usar a opção `-N` para descarregar o ficheiro remoto apenas se a versão for mais recente do que a do ficheiro local. O comando ficará assim:

result = subprocess.run(['wget', '-N', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Retomar transferências interrompidas

Se um download for interrompido, o `wget` pode retomá-lo de onde parou, poupando tempo e largura de banda. Para isso, terá de usar a opção `-c`, que indica ao `wget` para continuar um download interrompido.

O comando ficará assim:

result = subprocess.run(['wget', '-c', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])

Se o download do ficheiro foi concluído, poderá ver na saída a seguinte mensagem:

HTTP request sent, awaiting response... 416 Requested Range Not Satisfiable

The file is already fully retrieved; nothing to do.

Download recursivo

O `wget` pode ser usado para descarregar um site ou diretório inteiro, seguindo links de forma recursiva. Para isso, terá de usar as opções `-r` e `-l`: a opção `-r` diz à ferramenta para seguir links de forma recursiva e a opção `-l` especifica a profundidade máxima da recursão.

result = subprocess.run(['wget', '-r', '-l', '2', 'https://www.webscrapingapi.com'])

Este comando irá descarregar o site em "https://www.webscrapingapi.com" e seguir links para outras páginas no mesmo site até uma profundidade máxima de 2.

Quando é que o wget não é a solução?

Existem várias situações em que pode ser mais adequado utilizar o curl, o Beautiful Soup ou o Selenium em vez do wget:

  • Quando precisa de definir cabeçalhos HTTP ou cookies: O Curl permite-lhe definir cabeçalhos HTTP e cookies, o que pode ser útil ao interagir com APIs ou ao aceder a sites protegidos. O `wget` não tem esta capacidade.
  • Quando precisa de analisar e extrair dados de HTML: O Beautiful Soup é uma biblioteca Python que facilita a análise e extração de dados de documentos HTML. O wget não foi concebido para analisar e extrair dados de páginas web.
  • Quando precisa de interagir com um site como utilizador: O Selenium é uma ferramenta que permite automatizar o processo de interação com um site como utilizador. Pode ser usado para preencher formulários, clicar em botões e realizar outras ações que não são possíveis com o wget.

Conclusões

Python e wget são ferramentas poderosas para automatizar o processo de download de ficheiros e páginas web. Ao utilizar o wget com Python, pode personalizar os seus downloads, integrar tarefas de web scraping ou download de ficheiros nos seus scripts Python existentes e poupar tempo e esforço.

No entanto, é importante respeitar os termos de serviço dos sites de onde está a fazer o download e evitar sobrecarregar os servidores.

Se procura uma alternativa ao wget para web scraping, considere utilizar o WebScrapingAPI. O WebScrapingAPI é um serviço profissional de web scraping que lhe permite extrair facilmente dados de sites sem a necessidade de criar e manter o seu próprio web scraper.

É uma solução rápida, fiável e económica, adequada para empresas de todas as dimensões.

Experimente-o hoje mesmo!

Sobre o autor
Gabriel Cioci, Desenvolvedor Full-Stack @ WebScrapingAPI
Gabriel CiociDesenvolvedor Full-Stack

Gabriel Cioci é um programador Full Stack na WebScrapingAPI, responsável pela criação e manutenção dos sites, do painel do utilizador e das principais funcionalidades da plataforma destinadas aos utilizadores.

Comece a construir

Pronto para expandir a sua recolha de dados?

Junte-se a mais de 2.000 empresas que utilizam a WebScrapingAPI para extrair dados da Web à escala empresarial, sem quaisquer custos de infraestrutura.