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
- Carregue a página desejada com
HTMLDocument. - Chame
getElementsByTagName("img")para coletar os elementos de imagem. - Leia cada valor
srcnão vazio e mantenha apenas as fontes distintas. - Resolva cada fonte relativa com
Urledocument.getBaseURI(). - Envie um
RequestMessagepara cada imagem e verifique oResponseMessage. - 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.