Descarregar páginas Web e ficheiros sem esforço com Python e wget
Suciu Dan em Abr 21 2023

Está cansado de descarregar manualmente páginas Web e ficheiros? Gostaria que houvesse uma forma mais fácil de obter os dados de que necessita? Não procure mais! Neste artigo, vou mostrar-lhe como utilizar Python e a ferramenta de linha de comandos wget para automatizar o processo.
Neste artigo vai descobrir como usar Python e wget para automatizar o processo de download da web, enquanto aprende sobre as capacidades e limitações do wget, bem como ferramentas alternativas para web scraping.
Porquê Python?
Python é uma linguagem de programação poderosa e popular utilizada em vários domínios, como a automação, a ciência dos dados e o desenvolvimento de aplicações. É fácil de aprender e tem uma grande biblioteca de módulos e frameworks que melhoram 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 usada para descarregar ficheiros únicos, múltiplos ficheiros e até diretórios inteiros.
Aqui estão algumas das principais caraterísticas do wget:
- Descarregar ficheiros da Internet: O Wget pode ser utilizado para descarregar ficheiros da Internet, incluindo páginas Web, imagens e outros tipos de ficheiros.
- Opções de download personalizáveis: O Wget permite-lhe especificar várias opções para personalizar as suas transferências, tais como o diretório para guardar o ficheiro, o nome do ficheiro e a possibilidade de substituir ficheiros existentes.
- Retomar downloads interrompidos: Se uma transferência for interrompida, o wget pode retomá-la a partir do ponto onde ficou, poupando tempo e largura de banda.
- Descarga recursiva: o wget pode ser utilizado para descarregar um sítio Web ou diretório inteiro seguindo as ligações recursivamente.
- Suporte para HTTP, HTTPS e FTP: O Wget pode lidar com vários tipos de protocolos de Internet, incluindo HTTP, HTTPS e FTP, tornando-o uma ferramenta versátil para descarregar a partir de diferentes tipos de servidores.
- Disponível na maioria dos sistemas do tipo Unix: O Wget está amplamente disponível na maioria dos sistemas do tipo Unix, incluindo Linux e macOS, tornando-o fácil de utilizar numa variedade de plataformas.
Porquê usar o wget com Python?
Python e wget podem ser combinados para automatizar o processo de download de páginas web e ficheiros, poupando tempo e esforço. O wget pode ser personalizado através do Python, e as tarefas de raspagem da Web ou de descarregamento de ficheiros podem ser integradas em scripts Python existentes.
Existem várias razões pelas quais alguém pode escolher usar o wget com Python:
- Automatização: Ao usar wget com Python, você pode automatizar o processo de download de arquivos da internet. Isso pode economizar tempo e esforço, especialmente se você precisa baixar um grande número de arquivos ou sites.
- Personalização: O Wget permite-lhe especificar várias opções para personalizar as suas transferências, tais como o diretório para guardar o ficheiro, o nome do ficheiro e se pretende substituir ficheiros existentes. Ao utilizar o wget com Python, pode definir programaticamente estas opções e personalizar as suas transferências de acordo com as suas necessidades.
- Facilidade de utilização: O Python é conhecido pela sua simplicidade e legibilidade, tornando-o numa linguagem fácil de aprender e utilizar. Ao utilizar o wget com Python, pode tirar partido do poder do Python para facilitar as tarefas de raspagem da Web e de transferência de ficheiros.
- Escalabilidade: Python é uma linguagem escalável que é capaz de lidar com grandes quantidades de dados. Ao utilizar o wget com Python, pode aumentar a escala das suas tarefas de raspagem da Web ou de descarregamento de ficheiros para lidar com conjuntos de dados maiores.
Como começar
Agora que já discutimos os benefícios individuais e combinados do Python e do wget, vamos passar para a parte da escrita de código.
Instalando o 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 um utilizador do Windows, pode transferir o binário a partir desta página. Certifique-se de que adiciona o caminho do binário à variável de ambiente PATH. Outra opção é usar o WSL (Windows Subsystem for Linux). Leia mais sobre isso aqui.
- Se for um utilizador de Mac, instale o wget utilizando 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 sítio Web oficial e siga as instruções de instalação para a sua plataforma. Depois de ter instalado, pode verificar a versão com este comando:
python3 --versão
Executar comandos de sistema em Python
O módulo `subprocess` em Python permite que você execute comandos do sistema e capture sua saída. É uma forma poderosa e flexível de interagir com o sistema operativo a partir dos seus scripts Python.
Para usar o módulo `subprocess`, você precisa primeiro importá-lo para o seu script Python. Então, você pode usar a função `subprocess.run()` para executar um comando do sistema e capturar 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.
Aqui está um exemplo de utilização da função `subprocess.run()` para executar o comando ls, que lista os arquivos em um diretório:
import subprocess
result = subprocess.run(['ls', '-l'])
print(result.stdout)
Execute este código com o comando python3 main.py. O resultado deve ser semelhante a este.
total 4
-rw-r--r-- 1 dan dan 80 Jan 6 18:58 main.py
Nenhum
Descarregamento com o wget
Descarregar um ficheiro
Vamos começar por descarregar o logótipo da WebScrapingAPI. Substitua a lista de argumentos por `wget` e a URL do logotipo. O comando ficará parecido com este:
resultado = subprocess.run(['wget', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
O guião apresenta o seguinte resultado:
--2023-01-06 19:06:32-- https://www.webscrapingapi.com/images/logo/logo-white.svg
Resolvendo www.webscrapingapi.com (www.webscrapingapi.com)... 76.76.21.61, 76.76.21.98
A ligar a www.webscrapingapi.com (www.webscrapingapi.com)|76.76.21.61|:443... ligado.
Pedido HTTP enviado, a aguardar resposta... 200 OK
Comprimento: 5391 (5.3K) [image/svg+xml]
A guardar em: 'logo-white.svg'
logo-white.svg 100%[====================================================================================================================================================================>] 5.26K --.-KB/s em 0.06s
2023-01-06 19:06:33 (91.6 KB/s) - 'logo-white.svg' guardado [5391/5391]
Nenhum
A partir da saída, podemos ver como o `wget` resolve o nome do domínio, conecta-se ao domínio, recebe um código de resposta `200 OK`, encontra o tamanho do arquivo (5.3k) e começa a salvar o arquivo localmente com o nome `logo-white.svg`.
Pode procurar o ficheiro `logo-white.svg` na pasta do projeto.
Descarregar num diretório
Você pode baixar o arquivo para um diretório personalizado usando o sinalizador `-P`. Vamos atualizar o script e executá-lo para ver os resultados:
resultado = subprocess.run(['wget', '-P', 'images', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
O resultado é quase o mesmo, com a única diferença de o ficheiro ser armazenado no diretório `./images/`.
Definir o nome do ficheiro descarregado
Utilizando a flag `-O`, é possível especificar um novo nome para o ficheiro descarregado. Vamos tentar:
result = subprocess.run(['wget', '-O', 'named-logo.svg', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
Verifique na pasta do projeto o ficheiro `nomed-logo.svg`.
Descarregar ficheiro se a versão remota for mais recente
É possível utilizar o sinalizador `-N` para baixar o arquivo remoto apenas se a versão for mais recente que o arquivo local. O comando será parecido com este:
resultado = subprocess.run(['wget', '-N', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
Currículo interrompido downloads
Se um download for interrompido, o `wget` pode retomá-lo de onde parou, economizando tempo e largura de banda. Para fazer isso, você precisa usar a flag `-c`, que diz ao `wget` para continuar um download interrompido.
O comando terá o seguinte aspeto:
resultado = subprocess.run(['wget', '-c', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
Se a transferência do ficheiro tiver sido concluída, pode ver na saída a seguinte mensagem:
Pedido HTTP enviado, a aguardar resposta... 416 Requested Range Not Satisfiable
O ficheiro já foi totalmente recuperado; não há nada a fazer.
Transferência recursiva
O Wget pode ser utilizado para baixar um site ou diretório inteiro seguindo links recursivamente. Para fazer isso, você precisa usar os sinalizadores `-r` e `-l`: o sinalizador `-r` diz à ferramenta para seguir links recursivamente e o sinalizador `-l` especifica a profundidade máxima da recursão.
resultado = subprocess.run(['wget', '-r', '-l', '2', 'https://www.webscrapingapi.com'])
Este comando descarrega o sítio Web em"https://www.webscrapingapi.com" e segue as ligações para outras páginas do mesmo sítio Web até uma profundidade máxima de 2.
Quando o wget não é a solução?
Há várias situações em que pode ser mais apropriado usar curl, Beautiful Soup ou Selenium em vez de wget:
- Quando é necessário definir cabeçalhos HTTP ou cookies: O Curl permite definir cabeçalhos HTTP e cookies, o que pode ser útil quando se interage com APIs ou se acede a sites protegidos. O `wget` não tem essa capacidade.
- Quando é necessário analisar e extrair dados de HTML: Beautiful Soup é uma biblioteca Python que facilita a análise e a extração de dados de documentos HTML. O wget não foi concebido para analisar e extrair dados de páginas Web.
- Quando é necessário interagir com um sítio Web como um utilizador: O Selenium é uma ferramenta que permite automatizar o processo de interação com um sítio Web como um utilizador. Pode ser utilizado para preencher formulários, clicar em botões e executar outras acçõ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 de download de ficheiros nos seus scripts Python existentes e poupar tempo e esforço.
No entanto, é importante respeitar os termos de serviço dos sítios Web de onde está a descarregar e evitar sobrecarregar os servidores.
Se estiver à procura de uma alternativa ao wget para a recolha de dados da Web, considere a utilização do WebScrapingAPI. O WebScrapingAPI é um serviço profissional de raspagem da Web que lhe permite extrair facilmente dados de sítios Web sem a necessidade de construir e manter o seu próprio raspador da Web.
Trata-se de uma solução rápida, fiável e económica, adequada a empresas de todas as dimensões.
Notícias e actualizações
Mantenha-se atualizado com os mais recentes guias e notícias sobre raspagem da Web, subscrevendo a nossa newsletter.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artigos relacionados

Aprenda a extrair sites dinâmicos renderizados em JavaScript usando o Scrapy e o Splash. Desde a instalação até à escrita de um spider, à manipulação da paginação e à gestão das respostas do Splash, este guia abrangente oferece instruções passo a passo tanto para principiantes como para especialistas.


Comece a utilizar o WebScrapingAPI, a derradeira solução de raspagem da Web! Recolha dados em tempo real, contorne sistemas anti-bot e beneficie de apoio profissional.


Descubra como extrair e organizar eficientemente dados para raspagem da Web e análise de dados através de análise de dados, bibliotecas de análise de HTML e metadados schema.org.
