Descarregar páginas Web e ficheiros sem esforço com Python e wget

Suciu Dan em Abr 21 2023

imagem do blogue

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.

Experimente hoje mesmo!

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

miniatura
GuiasTutorial do Scrapy Splash: Dominando a arte de raspar sites renderizados em JavaScript com Scrapy e Splash

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.

Ștefan Răcila
avatar do autor
Ștefan Răcila
6 min. de leitura
miniatura
GuiasGuia de início rápido da API de raspagem da Web

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.

Mihnea-Octavian Manolache
avatar do autor
Mihnea-Octavian Manolache
9 min. de leitura
miniatura
Ciência da recolha de dados da WebWeb Scraping facilitado: a importância da análise de dados

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.

Suciu Dan
avatar do autor
Suciu Dan
12 min ler