Extrair imagens de um site em Java

Aspose.HTML for Java carrega uma página web em um HTMLDocument e disponibiliza seus elementos por meio do DOM HTML. Colete os elementos <img>, leia cada atributo src, resolva os caminhos relativos com base no URI do documento e solicite cada imagem pelo serviço de rede do documento.

Esse processo baixa os bytes do recurso referenciado pela página, sem converter nem recodificar as imagens. JPEG, PNG, GIF, WebP, SVG e outros formatos permanecem no formato retornado pelo servidor.


Baixar imagens de sites em Java

O exemplo abre uma página web pública, coleta valores src distintos e salva as respostas bem-sucedidas em um diretório images. Prefixos numéricos impedem que arquivos com o mesmo nome no caminho da URL substituam uns aos outros.

Extrair imagens de um site em Java

Path outputDirectory = Paths.get("images");
Files.createDirectories(outputDirectory);

try (HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/java/web-accessibility-rules/")) {
    // Collect distinct image sources from the HTML document
    HTMLCollection images = document.getElementsByTagName("img");
    Set<String> sources = new LinkedHashSet<>();

    for (Element image : images) {
        String source = image.getAttribute("src");
        if (!source.isEmpty()) {
            sources.add(source);
        }
    }

    int imageNumber = 1;
    for (String source : sources) {
        // Resolve a relative source against the document base URI
        Url imageUrl = new Url(source, document.getBaseURI());
        RequestMessage request = new RequestMessage(imageUrl);
        ResponseMessage response = document.getContext().getNetwork().send(request);

        if (!response.isSuccess()) {
            continue;
        }

        Path urlPath = Paths.get(imageUrl.getPathname());
        Path name = urlPath.getFileName();
        String fileName = name == null || name.toString().isEmpty()
            ? "image"
            : name.toString();
        Path outputPath = outputDirectory.resolve(imageNumber + "-" + fileName);

        // Save the original response bytes
        Files.write(outputPath, response.getContent().readAsByteArray());
        imageNumber++;
    }
}

Etapas para extrair imagens de HTML em Java

  1. Carregue a página desejada com HTMLDocument .
  2. Chame getElementsByTagName("img") para coletar os elementos de imagem.
  3. Leia cada valor src não vazio e mantenha apenas as fontes distintas.
  4. Resolva cada fonte relativa com Url e document.getBaseURI().
  5. Envie um RequestMessage para cada imagem e verifique o ResponseMessage .
  6. Crie um nome local exclusivo e grave os bytes da resposta com Files.write().

Quais imagens podem ser extraídas de um site?

O exemplo extrai recursos de rede referenciados diretamente pelo atributo src de elementos <img>. Antes de enviar cada solicitação, ele também resolve caminhos relativos, inclusive os afetados por um elemento <base> do documento. O mesmo padrão de solicitação pode ser aplicado a outras URLs de recursos depois que elas forem localizadas no DOM ou no CSS.

Para consultar o exemplo completo da documentação, leia Extract Images From Website in Java .


Cuidados ao extrair imagens

  • Mantenha o formato recebido. O código salva o corpo da resposta sem conversão. Quando a URL não tiver uma extensão útil, verifique o tipo de conteúdo da resposta e atribua um nome local adequado.
  • Evite nomes de arquivo duplicados. URLs de imagens diferentes podem terminar com o mesmo nome. O exemplo adiciona um prefixo numérico, mas aplicativos de produção podem usar um hash ou outra regra de nomenclatura estável.
  • Verifique cada resposta. Uma solicitação de imagem pode retornar uma página de erro, uma resposta de autenticação, um redirecionamento ou um recurso indisponível em vez dos bytes da imagem.
  • Planeje o processamento de recursos grandes. readAsByteArray() mantém a imagem completa na memória. Use uma estratégia de streaming quando as páginas puderem referenciar arquivos grandes ou muitas imagens.
  • Valide fontes não confiáveis. Restrinja esquemas e hosts permitidos quando a URL da página ou os caminhos das imagens forem fornecidos por usuários, e salve arquivos somente em um diretório autorizado.
  • Respeite os direitos autorais e os termos do site. Extraia e reutilize apenas imagens que sejam suas ou para as quais você tenha autorização. O acesso público não concede permissão para copiar, redistribuir ou usar comercialmente uma imagem.

FAQ

1. Como extrair do HTML imagens responsivas e com lazy loading em Java?

Verifique src, srcset e os elementos <picture><source>, além de atributos específicos da página, como data-src, que armazenam URLs de imagens adiadas. Resolva cada URL selecionada com base no URI do documento antes de solicitar o recurso de imagem.

2. Como extrair imagens de fundo CSS de um site em Java?

Examine folhas de estilo externas e atributos style inline em busca de declarações background-image. Resolva cada valor CSS url() com base na URL da folha de estilo ou do documento e, em seguida, solicite e salve o recurso referenciado separadamente.

3. A extração preserva arquivos JPEG, PNG, GIF, WebP ou SVG do site?

Gravar os bytes baixados sem recodificação preserva o formato de imagem retornado pelo servidor. Se a URL do recurso não tiver uma extensão confiável, use o tipo de conteúdo da resposta para definir o nome do arquivo local.

4. O Aspose.HTML for Java pode extrair ícones de um site?

Os ícones de um site normalmente são referenciados por elementos <link> cujo valor rel contém icon. Colete esses elementos, leia seus atributos href, resolva as URLs relativas e baixe os recursos pelo serviço de rede do documento.


Instalar Aspose.HTML for Java

Adicione Aspose.HTML for Java a partir do repositório oficial da Aspose. Substitua ASPOSE_HTML_VERSION por uma versão exata disponível na página de releases do Aspose.HTML for Java e recarregue ou recompile o projeto para resolver a dependência.

Adicione o repositório e a dependência ao projeto Maven:

Maven – pom.xml

<repositories>
    <repository>
        <id>AsposeJavaAPI</id>
        <url>https://releases.aspose.com/java/repo/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-html</artifactId>
        <version>ASPOSE_HTML_VERSION</version>
    </dependency>
</dependencies>

Adicione o repositório e a dependência ao projeto Gradle:

Gradle – build.gradle

repositories {
    maven {
        url = uri('https://releases.aspose.com/java/repo/')
    }
}
dependencies {
    implementation 'com.aspose:aspose-html:ASPOSE_HTML_VERSION'
}

Use um JDK compatível com a versão selecionada. Para instalação manual do JAR, Kotlin DSL, atualizações e solução de problemas de dependência, consulte Install Aspose.HTML for Java .

Tarefas relacionadas de extração de dados em Java

Continue com o download por URL, a extração de SVG, a página principal de extração de dados ou a visão geral da API Aspose.HTML for Java.