ProxynetProxynet

Como baixar todas as imagens de um site sem código

Publicado:

15 min de leitura

Enver Kaya
Autor: Enver Kaya
Molduras de fotos em pontos brancos espalhadas pela tela; uma, de pontos azuis, tem uma seta de download para baixo.

Você vai migrar o seu site antigo para uma nova plataforma. A agência que o criou não existe mais, você não tem acesso ao servidor e as páginas de produto têm algumas centenas de fotos. Salvar uma por uma levaria dias, e as primeiras que você tentou saíram menores e mais borradas do que aparecem na página.

Este guia trata de imagens que você tem permissão para copiar: o seu próprio site, o kit de imprensa que uma organização oferece a jornalistas ou imagens com licença aberta cujos termos você cumpre. Pegar as fotos de produto de um concorrente para a sua própria loja está fora do escopo, e conseguir baixar uma imagem não dá a você o direito de usá-la (Web scraping é legal?). A seguir estão quatro formas de salvar todas as imagens de uma página sem código, os motivos pelos quais as imagens chegam pequenas ou nem aparecem, o que fazer com arquivos WebP e um script opcional em Python.

De onde vêm as imagens de uma página?

Cada imagem de uma página é um arquivo separado. A página em si é um arquivo de texto (HTML) que diz onde cada imagem está, e o navegador busca cada imagem com uma requisição própria.

Uma imagem entra na página de uma destas três formas: uma tag img, que você pode salvar com o botão direito do mouse; um fundo CSS, e é por isso que alguns banners não oferecem a opção de salvar; ou um elemento picture, que lista a mesma imagem em vários formatos e tamanhos e deixa o navegador escolher.

Muitos sites servem imagens a partir de uma CDN (rede de distribuição de conteúdo), um conjunto de servidores que entrega os arquivos a partir de um local próximo ao visitante. Por isso os nomes de arquivo muitas vezes parecem aleatórios.

Como baixar todas as imagens de uma página da web?

Todos os métodos abaixo seguem os mesmos quatro passos:

  1. Abra a página e role até o fim. As imagens mais abaixo muitas vezes só carregam quando você chega até elas.
  2. Escolha um método na tabela abaixo.
  3. Limpe a pasta. Apague logotipos, ícones e imagens de rastreamento de um pixel.
  4. Confira o tamanho. Se uma imagem for menor do que parecia na tela, procure o endereço em tamanho original.
MétodoO que você obtémImagens carregadas ao rolarTamanho original?Indicado para
Chrome: Salvar página como > Página da Web, completaUm arquivo HTML e uma pasta com os arquivos deleAs carregadas por script, só depois de rolarNão, a cópia escolhida para a sua telaUma página, sem instalar nada
Extensão de download em massa de imagensAs imagens que você marcar, depois de filtrarSim, se você rolou antesEm geral, a cópia exibida na telaAlgumas páginas, ordenar por tamanho
Firefox: Informações da página > MídiaTodas as imagens da página, inclusive fundosSim, se você rolou antesA cópia que a página carregouFirefox, sem complementos
DevTools > Rede > ImgUm arquivo por vez, com o endereço realSim, conforme você rolaSim, se você escolher a maior cópiaPoucas imagens em tamanho original
Script em Python (avançado)Todos os endereços img e source do HTMLdata-src, não vê imagens adicionadas por JavaScriptEscolhe a maior cópia do srcsetTarefas repetidas

Como salvar todas as imagens com a opção Página da Web, completa do Chrome

Este método não exige instalar nada. Abra a página, role até o fim, abra o menu de três pontos no canto superior direito e escolha Transmitir, salvar e compartilhar > Salvar página como (Ctrl+S, ou Cmd+S no Mac), como descreve a ajuda do Chrome.

Defina o formato como Página da Web, completa e clique em Salvar. O Chrome grava um arquivo .html e, ao lado dele, uma pasta com o mesmo nome terminada em _files. As imagens ficam nessa pasta, junto com folhas de estilo e scripts; ordene a pasta por tipo para encontrá-las.

O Chrome salva os arquivos para os quais a página aponta naquele momento, então as imagens que um script insere durante a rolagem ficam de fora se você nunca rolou. Você também recebe as cópias que a sua tela recebeu, nem sempre os originais.

Como usar uma extensão de download em massa de imagens?

Pesquise "image downloader" na Chrome Web Store para encontrar extensões que listam todas as imagens da aba aberta. Não citamos nenhuma, porque elas mudam de dono com frequência. A maioria funciona assim:

  1. Instale a extensão, abra a página e role até o fim.
  2. Clique no ícone da extensão. Aparece uma grade com as imagens da página.
  3. Aumente o filtro de largura mínima até os ícones e as miniaturas sumirem.
  4. Marque as imagens que você quer e clique em baixar.

Para não passar por uma janela de salvamento a cada imagem, vá em Configurações > Downloads e desative Perguntar onde salvar cada arquivo antes de fazer download.

Leia as permissões antes de instalar. Muitas dessas extensões pedem para "Ler e alterar todos os seus dados em todos os sites", o que permite que elas vejam cada página que você abre. Confira as avaliações, a data da última atualização e o desenvolvedor, e remova a extensão quando terminar.

Como salvar todas as imagens com a janela Informações da página do Firefox

O Firefox tem um recurso próprio para isso. Pressione Ctrl+I (Cmd+I no Mac) para abrir a janela Informações da página e depois abra a aba Mídia.

A lista mostra todas as imagens que a página usa, inclusive fundos e ícones, com o endereço e o tipo de cada uma. Clique em Selecionar tudo, depois em Salvar como…, e escolha uma pasta. Conte com apagar alguns ícones depois.

Como encontrar o endereço real de uma imagem com o DevTools?

O DevTools (ferramentas de desenvolvedor) é um painel integrado ao Chrome que mostra tudo o que uma página carrega, e é por ele que você encontra o arquivo em tamanho original.

  1. Pressione F12 e abra a aba Rede (Network).
  2. Clique no filtro Img, um dos filtros por tipo listados na referência do painel Network do Chrome.
  3. Recarregue a página e role até o fim. O DevTools só registra as requisições enquanto está aberto.
  4. Cada linha mostra o nome do arquivo, o tipo (webp, avif, jpeg) e o tamanho. Clique em uma linha para ver uma prévia.
  5. Clique com o botão direito na linha, escolha Copiar > Copiar URL, abra o endereço em uma nova aba e salve a imagem ali.

Para uma única imagem, clique nela com o botão direito e escolha Inspecionar. Se a tag img tiver um atributo srcset, ele lista várias cópias com uma largura depois de cada uma, como photo-400.jpg 400w, photo-1600.jpg 1600w. O maior número corresponde à maior cópia.

Procurar ".jpg" no código-fonte da página (Ctrl+U) deixa muita coisa de fora: o código-fonte é o HTML que o servidor enviou primeiro, então as imagens que o JavaScript adiciona depois não estão ali.

Por que as imagens baixam pequenas, borradas ou nem baixam?

1. O navegador escolheu uma cópia pequena. Com srcset, um site lista a mesma imagem em várias larguras. A referência do elemento img no MDN diz que o navegador escolhe entre essas fontes a seu próprio critério. Em uma janela estreita, ele costuma pegar uma menor, e é essa que você salva.

2. A imagem ainda não tinha carregado. Uma tag com loading="lazy" espera até a imagem se aproximar da tela. Outros sites guardam o endereço real em um atributo data-src e mostram uma imagem provisória em branco ou borrada até que um script faça a troca. É o mesmo mecanismo que preenche as páginas com JavaScript depois do primeiro carregamento (Páginas estáticas e dinâmicas no web scraping).

3. A miniatura e a imagem inteira são arquivos diferentes. No books.toscrape.com, um site criado para praticar scraping, a capa de "A Light in the Attic" tem 125 × 155 pixels na página inicial e 318 × 395 pixels na página do próprio livro.

4. O endereço pede uma cópia pequena. Muitas CDNs de imagem colocam o tamanho no endereço, como ?w=400, e redimensionam a imagem de acordo.

Para resolver, alargue a janela, role a página inteira, abra a imagem grande da galeria antes de salvar ou pegue a maior cópia do srcset no DevTools.

Como abrir imagens que baixam em WebP ou AVIF?

WebP e AVIF são formatos mais novos que geram arquivos menores que JPEG. O guia de formatos de imagem do MDN diz que imagens WebP com perdas são, em média, de 25% a 35% menores que JPEG com compressão semelhante, e que o WebP tem amplo suporte nos navegadores atuais.

Um mesmo endereço pode enviar formatos diferentes para programas diferentes. Quando pedimos uma imagem a uma CDN de imagens, uma requisição simples recebeu um JPEG, e uma requisição com o cabeçalho Accept que o Chrome envia recebeu AVIF. É por isso que um arquivo que você esperava em .jpg chega como .webp ou .avif.

No Windows 11, o Paint abre arquivos WebP: escolha Arquivo > Salvar como e selecione JPEG. Arquivos AVIF podem exigir a Extensão de Vídeo AV1 (AV1 Video Extension), gratuita, da Microsoft Store. Para dezenas de arquivos, um conversor de imagens em lote faz o trabalho de uma vez só.

Avançado: baixar as imagens de uma página com Python

Esta seção opcional é para quem repete a tarefa, como um backup mensal do próprio site. Você precisa do Python 3.10 ou mais recente e de pip install requests beautifulsoup4. O script:

  • envia um User-Agent que identifica o script e informa um endereço de contato (O que é User-Agent?);
  • lê todas as tags img e picture source e pega o maior candidato de data-srcset ou srcset; se não houver, usa data-src ou src;
  • ignora imagens provisórias data: embutidas e completa endereços relativos como ../img/photo.jpg;
  • baixa cada arquivo em streaming dentro de um bloco with, como recomenda a documentação do Requests, e ignora tudo o que não for um 200 com tipo image/;
  • nunca sobrescreve um arquivo (um segundo photo.jpg vira photo-1.jpg) e espera um segundo depois de cada endereço, inclusive os ignorados.
python
import mimetypes
import time
from pathlib import Path
from urllib.parse import urljoin, urlsplit

import requests
from bs4 import BeautifulSoup

PAGE_URL = "https://example.com/gallery/"  # uma página sua ou que você pode copiar
FOLDER = Path("images")
DELAY = 1.0  # segundos entre downloads
HEADERS = {"User-Agent": "image-backup/1.0 (contact: you@example.com)"}


def largest_candidate(srcset):
    """Retorna a URL com o maior valor w ou x de um srcset."""
    best_url, best_size = None, -1.0
    for part in srcset.split(","):
        bits = part.split()
        if not bits:
            continue
        size = 1.0
        if len(bits) > 1 and bits[1][-1] in "wx":
            size = float(bits[1][:-1])
        if size > best_size:
            best_url, best_size = bits[0], size
    return best_url


def image_urls(html, base_url):
    soup = BeautifulSoup(html, "html.parser")
    urls = []
    for tag in soup.select("img, picture source"):
        srcset = tag.get("data-srcset") or tag.get("srcset")
        url = largest_candidate(srcset) if srcset else None
        url = url or tag.get("data-src") or tag.get("src")
        if url and not url.startswith("data:"):  # ignora imagens provisórias embutidas
            full = urljoin(base_url, url)
            if full not in urls:
                urls.append(full)
    return urls


def free_name(url, content_type):
    """Escolhe um nome de arquivo que não sobrescreva um download anterior."""
    name = Path(urlsplit(url).path).name or "image"
    stem, suffix = Path(name).stem, Path(name).suffix
    if not suffix:
        suffix = mimetypes.guess_extension(content_type.split(";")[0]) or ".img"
    target, n = FOLDER / f"{stem}{suffix}", 1
    while target.exists():
        target, n = FOLDER / f"{stem}-{n}{suffix}", n + 1
    return target


FOLDER.mkdir(exist_ok=True)
with requests.Session() as session:
    session.headers.update(HEADERS)
    page = session.get(PAGE_URL, timeout=15)
    page.raise_for_status()
    for url in image_urls(page.text, page.url):
        try:
            with session.get(url, stream=True, timeout=30) as r:
                ctype = r.headers.get("Content-Type", "")
                if r.status_code != 200 or not ctype.startswith("image/"):
                    print("skipped", r.status_code, ctype, url)
                    continue
                target = free_name(url, ctype)
                with open(target, "wb") as f:
                    for chunk in r.iter_content(chunk_size=64 * 1024):
                        f.write(chunk)
            print("saved", target.name)
        except requests.RequestException as exc:
            print("failed", url, type(exc).__name__)
        finally:
            time.sleep(DELAY)  # roda também depois de um arquivo ignorado

Nós o executamos com Python 3.13, Requests 2.34.2 e Beautiful Soup 4.15.0 em uma página de teste local: ele escolheu a cópia 1600w em vez da 400w, encontrou o endereço por trás de uma imagem provisória data:, manteve separados dois arquivos photo.jpg e ignorou um 404. No books.toscrape.com, ele salvou as 20 miniaturas da página inicial. Comece cada execução com uma pasta vazia.

Não há novas tentativas: quando um servidor responder 429, leia antes Códigos de status HTTP no web scraping. Downloads paralelos (Concorrência e paralelismo no web scraping) e proxies também ficaram de fora, porque o backup do seu próprio site não precisa de nenhum dos dois. Os endereços relativos são explicados em paginação e links relativos, e a leitura de atributos, no nosso tutorial de BeautifulSoup. Quem usa o terminal encontra opções de download recursivo com limites respeitosos em Uso de proxy com o wget.

Casos de uso

Erros comuns

  • Salvar antes de rolar. As imagens que carregam na rolagem ficam de fora.
  • Confundir a miniatura com o original.
  • Deixar a pergunta de download ativada. Você passa por uma janela de salvamento para cada imagem.
  • Instalar uma extensão sem ler as permissões.
  • Deixar arquivos se sobrescreverem. Duas pastas de um site podem ter, cada uma, um photo.jpg.
  • Achar que um download vem com direito de uso. Confira os termos do dono ou a licença.
  • Rodar um script sem pausa. Centenas de requisições por minuto a partir de um mesmo endereço podem deixar um site pequeno lento, e o servidor pode responder 429 Too Many Requests.

Guia de decisão

NecessidadeRecomendação
Todas as imagens de uma página, sem instalar nadaRole até o fim e use Salvar página como > Página da Web, completa do Chrome
Imagens de algumas páginas, sem íconesUma extensão de download em massa com filtro de largura; confira as permissões e remova-a depois
Firefox, sem complementosCtrl+I > Mídia > Selecionar tudo > Salvar como…
O tamanho original de uma imagemDevTools > Rede > Img, ou o maior candidato do srcset
Os arquivos chegam em WebP ou AVIF e você precisa de JPGAbra no Paint e salve como JPEG; um conversor em lote para muitos arquivos
Backup mensal das imagens do seu próprio siteA exportação de mídia do seu CMS; se não houver, o script em Python
Imagens de todas as páginas de um siteUm rastreamento: primeiro permissão e robots.txt, depois as opções de download em massa do wget

As linhas do alto da tabela são as que exigem menos preparação.

Perguntas frequentes

Extensões de download em massa de imagens são seguras?

Podem ser, mas a maioria precisa de permissão para ler e alterar dados em todos os sites que você visita, inclusive o seu e-mail e o seu banco. Escolha uma com muitas avaliações, atualização recente e desenvolvedor identificado, e remova-a depois.

Por que as imagens baixam em WebP?

O site envia WebP ou AVIF porque os arquivos são menores, e o seu navegador informa ao servidor que consegue exibi-los. Os navegadores atuais e o Paint do Windows 11 abrem WebP, e o Paint pode salvar o arquivo como JPEG.

Por que as imagens não vêm em tamanho original?

Provavelmente a página entregou à sua tela uma cópia menor do srcset, ou você salvou a miniatura da galeria. Alargue a janela, abra a imagem grande ou pegue o maior candidato no DevTools. Se o site só publica cópias pequenas, não existe um arquivo maior.

Posso baixar todas as imagens de uma página da web pelo celular?

Não de uma vez só com o app padrão do Chrome no Android. Você pode salvar as imagens uma por uma: toque na imagem e mantenha pressionado, depois toque em Fazer download da imagem, como descreve a ajuda do Google para Android. Para uma página inteira, use um computador.

Posso baixar de uma vez as imagens de todas as páginas de um site?

Isso é um rastreamento (crawl), feito por um programa que segue links de página em página, e não o salvamento de uma página (Web scraping e web crawling). Obtenha permissão, leia o robots.txt e use configurações respeitosas, como as da seção de download em massa de Uso de proxy com o wget. Empresas que precisam de rastreamentos em grande escala podem conhecer a nossa solução de web crawler.

Posso usar as imagens baixadas no meu próprio site?

Só se você tiver esse direito. Um download dá a você uma cópia, não uma licença. As suas próprias fotos não são problema, as imagens de um kit de imprensa seguem os termos do kit e as imagens com licença aberta seguem a licença delas, que muitas vezes exige crédito (Web scraping é legal?).

Em resumo

Para baixar todas as imagens de uma página da web, role até o fim e depois salve a página como Página da Web, completa no Chrome, use uma extensão de download em massa de imagens ou recorra à janela Informações da página do Firefox. Imagens pequenas geralmente indicam uma cópia menor do srcset ou uma imagem que ainda não tinha carregado, e o DevTools mostra o endereço em tamanho original. Fique nas imagens que você pode usar e, se a sua empresa precisa coletar imagens com regularidade e em grande escala, veja as nossas soluções de extração de dados.