Geonode logo
Geonode Team

Geonode Team

Atualizado: 7 de outubro de 2026

Publicado: 2 de setembro de 2026

Ferramentas para copiar sites: um guia completo

Um «ripper» de sites descarrega as páginas e os recursos de um site para o seu próprio disco e reescreve os links para que funcione offline. Esta categoria já existe há muito tempo, as ferramentas estão bem desenvolvidas e a maioria delas deixa de funcionar em sites modernos pela mesma razão. Essa razão é o JavaScript, e compreendê-la permite-lhe escolher a ferramenta mais adequada de forma mais fiável do que qualquer comparação de funcionalidades. Este guia aborda as ferramentas que vale a pena conhecer, o que cada uma delas faz realmente e os limites — técnicos, legais e de boa conduta — que se aplicam a todas elas.

A nossa posição, declarada: somos a Geonode e vendemos proxies, que quase nunca são necessários para este fim. Fazer um espelho de um site para o qual tem autorização é uma tarefa de fonte única e de volume moderado que funciona perfeitamente a partir da sua própria ligação. Se está a considerar utilizar proxies para o efeito, isso significa normalmente que está a espelhar algo a um ritmo que o site não aceita, e a solução correta é abrandar o ritmo, em vez de recorrer à distribuição. Existe uma exceção genuína — o espelhamento de conteúdos específicos de uma região — que é referida abaixo. Tudo o resto neste artigo funciona a partir de um portátil, sem qualquer infraestrutura.

O que estas ferramentas fazem, na verdade

Quatro passos, em todas as ferramentas desta categoria.

Recuperar uma página. Descarregar o HTML. Identificar os recursos. Analisar em busca de imagens, folhas de estilo, scripts e tipos de letra, e seguir também esses recursos. Seguir os links. Descobrir mais páginas dentro do âmbito que definiu. Reescrever as referências. Alterar os URLs absolutos para caminhos relativos, para que a cópia funcione a partir do seu sistema de ficheiros.

Essa quarta etapa é o que distingue um «ripper» de um «crawler». Um «crawler» recolhe dados; um «ripper» produz uma cópia local navegável, e a reescrita de links é a diferença.

As utilizações legítimas são comuns: arquivar um site antes de este ficar offline, levar documentação para consultar offline durante uma viagem ou numa rede restrita, migrar entre plataformas, manter um registo de conformidade e preservar o seu próprio trabalho quando um servidor é desativado.

wget: A resposta por defeito

Já está presente na maioria dos sistemas Unix e é adequado para uma grande parte das tarefas.

wget --mirror --convert-links --adjust-extension --page-requisites \
     --no-parent --wait=1 --random-wait \
     https://example.com/docs/

Cada opção tem a sua utilidade, e o manual do wget explica-as com precisão.

**--mirror

** «ativa opções adequadas para espelhamento. Esta opção ativa a recursão e a marcação de data e hora, define uma profundidade de recursão infinita e mantém as listas de diretórios FTP. Atualmente, é equivalente a -r -N -l inf --no-remove-listing

.»

**--page-requisites

** «faz com que o Wget descarregue todos os ficheiros necessários para apresentar corretamente uma determinada página HTML. Isto inclui elementos como imagens incorporadas, sons e folhas de estilo referenciadas.» Sem esta opção, obtém-se HTML sem estilo e sem imagens.

**--convert-links

** reescreve as referências «após a conclusão do download... para as tornar adequadas para visualização local», afetando «não só as hiperligações visíveis, mas qualquer parte do documento que contenha ligações a conteúdo externo».

**--adjust-extension

** acrescenta .html

às páginas servidas como HTML sem extensão HTML — o manual dá o exemplo de «criar um espelho de um site remoto que utiliza páginas .asp, mas em que se pretende que as páginas espelhadas sejam visualizáveis no seu servidor Apache padrão».

**--no-parent

** garante «que apenas os ficheiros abaixo de uma determinada hierarquia serão descarregados», o que limita a tarefa a /docs/

em vez de todo o site.

**--wait=1

** é o sinalizador de cortesia, e o manual recomenda-o explicitamente: «Recomenda-se a utilização desta opção, uma vez que alivia a carga do servidor ao tornar os pedidos menos frequentes." Combine-a com --random-wait

, que, segundo o manual, foi «inspirada nesta recomendação imprudente de bloquear muitos utilizadores não relacionados de um site devido às ações de um único».

Mais duas opções que vale a pena conhecer. -Q

define um limite de transferência para que um espelho ilimitado não encha o seu disco. E -l

define uma profundidade de recursão, caso a opção «infinito» seja demasiado generosa.

As limitações do wget são reais: não executa JavaScript, a sua reescrita de links é boa, mas não perfeita em sites complexos, e não possui interface gráfica. Para um site de documentação ou um blogue estático, nada disso importa.

HTTrack: O Clássico Gráfico

O HTTrack é a ferramenta dedicada mais conhecida nesta categoria, de código aberto, multiplataforma, com interface gráfica e linha de comandos. O projeto continua ativo.

Onde supera o wget: uma interface genuína para quem não passa a vida no terminal, melhor gestão de estruturas de ligações complexas, projetos retomáveis e um modo de atualização que volta a espelhar apenas o que foi alterado.

Onde fica aquém: a mesma limitação fundamental — não executa JavaScript —, além de uma sintaxe de filtragem que requer alguma aprendizagem e uma reputação entre os operadores de sites que faz com que alguns o bloqueiem com base no agente do utilizador.

Para um utilizador sem conhecimentos técnicos que precise de uma cópia navegável de um site estático, esta é a recomendação. Para quem se sente à vontade com um shell, o wget faz o mesmo trabalho com menos surpresas.

Ferramentas de página única

Uma abordagem diferente ao problema e, muitas vezes, a mais adequada.

Se pretender uma página completa em vez de um site inteiro, as ferramentas que incorporam tudo num único ficheiro HTML autónomo são mais úteis do que um espelho. Incorporam imagens como URIs de dados, integram o CSS e produzem um ficheiro que pode enviar por e-mail, arquivar ou abrir em qualquer lugar, sem dependências.

As extensões de navegador desta família são a versão prática para a maioria das pessoas e têm uma vantagem decisiva em relação a todas as ferramentas de linha de comandos aqui apresentadas: capturam a página tal como é apresentada, após a execução do JavaScript. Para uma aplicação moderna, essa é a diferença entre uma cópia funcional e uma estrutura vazia.

A desvantagem é que são manuais — uma página de cada vez, com um clique humano. Para um punhado de páginas, isso é aceitável; para mil, já não é.

ArchiveBox e ferramentas de preservação

O ArchiveBox é a opção a destacar quando o objetivo é a preservação, em vez da navegação offline. Aceita URLs e produz vários formatos de arquivo de uma só vez — HTML, uma captura de ecrã, um PDF, texto extraído e um ficheiro WARC.

O WARC é o formato que vale a pena conhecer, porque é o utilizado pelos arquivos da Web. Armazena as próprias transações HTTP, em vez de uma aproximação do sistema de ficheiros, o que significa que os cabeçalhos, os códigos de estado e os bytes exatos são preservados. Para qualquer situação em que a fidelidade seja importante — questões legais, conformidade, investigação —, este é um registo substancialmente melhor do que um diretório de HTML reescrito.

O ArchiveBox é auto-hospedado, mantém um índice e lida com JavaScript através de um navegador sem interface gráfica. É mais pesado do que o wget, mas produz resultados mais duradouros.

Por que razão todos têm dificuldades com sites modernos

A única explicação por trás da maior parte da frustração nesta categoria.

Renderização em JavaScript. O wget e o HTTrack obtêm o HTML e analisam-no. Uma aplicação de página única devolve um documento quase vazio, juntamente com um conjunto de scripts, e o conteúdo é montado no navegador. O que se espelha é apenas a estrutura.

Conteúdo orientado por API. Mesmo quando o HTML inicial contém conteúdo, a navegação subsequente pode ir buscar JSON a partir de uma API. Essas solicitações são feitas por código, não por links na marcação, pelo que um espelho que segue links nunca as descobre.

Deslocamento infinito e carregamento diferido. O conteúdo que aparece mediante interação não consta de todo na marcação.

Roteamento do lado do cliente. URLs que nunca chegam ao servidor. Um espelho não consegue obter o que nunca foi solicitado.

Autenticação e personalização. Tudo o que está protegido por um login e tudo o que varia de utilizador para utilizador.

As soluções alternativas, por ordem de esforço:

Verificar se existe uma exportação estática. Os sites de documentação oferecem frequentemente um PDF ou um pacote para descarregar. Pergunte antes de criar o espelho.

Verifique se existe uma API. Se o conteúdo provier de uma API, obtê-lo diretamente é mais fácil e mais completo do que criar um espelho do front-end.

Utilize uma ferramenta baseada no navegador para as páginas que necessitam efetivamente de renderização. O Playwright consegue navegar, aguardar pelo conteúdo e guardar o HTML renderizado, o que constitui um espelho com suporte a JavaScript, à custa de escrever um script e de utilizar consideravelmente mais largura de banda.

Aceite um espelho parcial. Para muitos fins, as partes estáticas de um site são, de qualquer forma, o que pretendia.

Espelhar um site JavaScript com o Playwright

A solução prática quando as ferramentas clássicas devolvem uma estrutura vazia. Não é um extrator de uso geral, mas é suficiente para capturar um conjunto definido de páginas tal como são apresentadas.

import { chromium } from 'playwright';
import { writeFile, mkdir } from 'fs/promises';
import { dirname } from 'path';

const urls = [/* the pages you want */];

const browser = await chromium.launch();
const ctx = await browser.newContext();
const page = await ctx.newPage();

for (const url of urls) {
  await page.goto(url, { waitUntil: 'domcontentloaded' });
  await page.waitForSelector('main', { timeout: 15000 }).catch(() => {});

  const html = await page.content();          // rendered DOM, not source
  const path = 'mirror' + new URL(url).pathname.replace(/\/$/, '/index') + '.html';
  await mkdir(dirname(path), { recursive: true });
  await writeFile(path, html);

  await page.waitForTimeout(1000 + Math.random() * 1000);
}

await browser.close();

Há quatro aspetos importantes aqui.

**page.content()

devolve o DOM renderizado**, não o HTML de origem. É precisamente por isso que esta abordagem funciona onde o wget falha — obtém-se a marcação tal como existe depois de o JavaScript a ter construído.

Aguardar por um seletor, não pela inatividade da rede. As páginas com beacons de análise ou websockets nunca ficam inativas, pelo que waitUntil: 'networkidle'

simplesmente atingirá o tempo limite em muitos sites modernos. Aguardar por um elemento que sabemos que deve estar presente é mais rápido e mais fiável.

A pausa deliberada entre páginas. A mesma cortesia que o comando «--wait

» no wget, e igualmente necessária.

Sem reescrita de links. Esta é a limitação real: obtém-se HTML renderizado com referências absolutas, pelo que a cópia necessita de uma ligação à Internet para ser apresentada corretamente. Adicionar a reescrita implica analisar cada documento, descarregar todos os recursos e reescrever as referências — o que equivale a reimplementar o wget, e, nessa altura, é mais fácil combinar os dois: usa o Playwright para renderizar e guardar e, em seguida, executa o wget nos ficheiros guardados para recolher os recursos.

E tenha em conta o custo da largura de banda. Um navegador descarrega todas as imagens, tipos de letra, scripts e vídeos em pré-carregamento, pelo que isto consome aproximadamente uma ordem de grandeza a mais de tráfego do que um espelho do wget das mesmas páginas. Bloquear pedidos de tipos de letra e multimédia com page.route()

reduz substancialmente esse consumo, nos casos em que estes não fazem parte do que está a preservar.

Escolher uma ferramenta

NecessidadeFerramenta
Site estático, à vontade com o terminalwget
Site estático, prefere uma interface gráficaHTTrack
Uma única página, completa e autónomaExtensão do navegador de ficheiro único
Preservação com fidelidadeArchiveBox / WARC
Site com muito JavaScriptScript Playwright
O seu próprio site antes da migraçãoExportação da sua plataforma

Vale a pena destacar esta última linha, porque é o caso que as pessoas costumam resolver da forma mais difícil. Se for o proprietário do site, utilize a exportação da plataforma. Um dump da base de dados, uma compilação de site estático ou um backup do fornecedor de alojamento é completo, inclui o que o espelhamento não consegue ver e demora apenas alguns minutos. Espelhar o seu próprio site é fazer a versão difícil de uma tarefa fácil.

As regras que se aplicam independentemente

Independentemente da ferramenta.

** O ficheiro «robots.txt» aplica-se a si.** O wget respeita-o por predefinição. O HTTrack respeita-o por predefinição. É possível configurar ambos para não o fazerem, sendo que tal constitui uma escolha deliberada com consequências. É agora uma norma — RFC 9309 — e abordámos a sua leitura em como ler um ficheiro robots.txt.

A limitação de taxa não é opcional. Um espelho sem --wait envia pedidos tão rapidamente quanto a ligação permite, o que é indistinguível de um ataque do ponto de vista do servidor. Um pedido por segundo é um limite mínimo razoável.

Os direitos de autor não desaparecem. Descarregar uma cópia para leitura pessoal offline é uma coisa; republicá-la é outra. O conteúdo continua a pertencer ao proprietário.

Os termos de serviço podem proibi-lo categoricamente, independentemente da viabilidade técnica.

A largura de banda tem um custo para o site. Um espelho de um site de grande dimensão pode transferir muitos gigabytes, e alguém paga por isso.

Pergunte. Para qualquer coisa de maior envergadura, um e-mail é mais rápido do que a solução alternativa. Os proprietários dos sites costumam dizer que sim e, por vezes, oferecem um pacote que poupa-lhe completamente todo esse trabalho.

Onde os proxies se aplicam, em resumo

Uma vez que este é o nosso produto, a resposta sincera é curta.

Não precisa deles para espelhar um site para o qual tenha permissão para o fazer, a um ritmo razoável, a partir de um único local. Esse é o caso da esmagadora maioria dos utilizadores legítimos, e uma única ligação é suficiente para isso.

Pode precisar deles se o site apresentar conteúdos diferentes consoante a região e pretender as versões regionais — um site de documentação com páginas localizadas ou um catálogo com inventário específico por país. Aqui, a geografia é o fator determinante, e trata-se de um caso de utilização genuíno.

Não precisa deles para aumentar a velocidade, e recorrer a eles por esse motivo significa que está a fazer o espelhamento a uma velocidade que o site consideraria inaceitável. A resposta correta para isso é --wait, e não a distribuição.

Se for o caso regional, a largura de banda do centro de dados é a escolha sensata — a nossa começa nos 0,14 $/GB, verificado em setembro de 2026 na nossa página de preços — e tenha em conta que um espelho completo é medido em gigabytes, pelo que a aritmética é importante.

Perguntas frequentes

O que é um «website ripper»?

Uma ferramenta que descarrega as páginas e os recursos de um site para o armazenamento local e reescreve os links para que a cópia funcione offline. A reescrita dos links é o que a distingue de um «crawler», que recolhe dados em vez de criar um espelho navegável.

Como faço para descarregar um site inteiro? O

wget --mirror --convert-links --adjust-extension --page-requisites --no-parent --wait=1 URL cobre a maioria dos sites estáticos. Para uma alternativa gráfica, o HTTrack faz o mesmo trabalho. Para um site com muito JavaScript, nenhum dos dois funcionará bem e será necessária uma abordagem baseada no navegador.

Por que é que o site que descarreguei parece estar avariado?

Normalmente, falta o --page-requisites, pelo que as folhas de estilo e as imagens não foram obtidas, ou o --convert-links, pelo que as referências ainda apontam para o site ativo. Se as páginas estiverem vazias em vez de sem estilo, o site apresenta o conteúdo com JavaScript e uma ferramenta que não o renderiza não consegue capturá-lo.

É legal descarregar um site?

A descarga para uso pessoal offline é, geralmente, algo normal; a republicação é uma questão diferente, uma vez que os direitos de autor continuam a aplicar-se. Os termos de serviço podem proibir totalmente a descarga automatizada, independentemente dos meios técnicos utilizados. Isto varia consoante a jurisdição e não constitui aconselhamento jurídico.

Posso descarregar um site que utilize JavaScript?

Não com o wget ou o HTTrack, que obtêm e analisam HTML sem executar scripts. É necessária uma abordagem baseada num navegador — uma extensão de ficheiro único para páginas individuais ou um script Playwright que navegue, aguarde pelo conteúdo e guarde o resultado renderizado.

Qual é o melhor programa gratuito para descarregar sites?

O wget, se se sentir à vontade com a linha de comandos, uma vez que já está instalado e é totalmente adequado para sites estáticos. O HTTrack, se preferir uma interface gráfica. O ArchiveBox, se o objetivo for a preservação em vez da navegação, uma vez que produz ficheiros WARC juntamente com o HTML.

Como faço para descarregar um site sem ser bloqueado?

Defina um atraso de, pelo menos, um segundo entre os pedidos, respeite o robots.txt, identifique-se de forma honesta e limite o âmbito com --no-parent e um limite de profundidade. A maioria dos bloqueios nesta categoria resulta do espelhamento a toda a velocidade, o que, do ponto de vista do servidor, parece idêntico a um ataque.

Devo usar um proxy para descarregar um site?

Apenas se precisar de versões do conteúdo específicas para uma determinada região. Para um espelhamento normal a uma velocidade razoável, basta uma ligação. Recorrer a proxies para acelerar o processo significa que está a transferir a uma velocidade que o site não aceita, e a solução para isso é definir um intervalo de espera.

Conclusão

No caso de um site estático, este problema já está resolvido e a ferramenta já se encontra no seu computador. Um comando wget com cinco opções gera uma cópia local navegável, e a única opção que as pessoas se esquecem de usar é aquela que torna o processo mais «educado».

No caso de uma aplicação moderna, nenhuma das ferramentas clássicas funciona, e a razão não é uma limitação que se possa contornar através de configurações. Estas ferramentas obtêm e analisam o HTML; o conteúdo é montado por JavaScript após a obtenção. As opções realistas são uma captura baseada no navegador para as páginas que importam, uma API, se existir, ou uma exportação, se for o proprietário do site — e esta última é a situação que, na maioria das vezes, acaba por ser resolvida da forma mais difícil.

Seja o que for que utilize, há três aspetos que se aplicam independentemente da ferramenta. Limite a taxa de acesso, porque um espelho a toda a velocidade é indistinguível de um ataque. Respeite o robots.txt, porque é uma norma e ignorá-la é uma escolha. E para qualquer coisa substancial, pergunte — um e-mail demora um minuto e, muitas vezes, resulta num pacote que torna todo o exercício desnecessário.