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
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
NoneTransferê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.




