Extraire des images d’un site web en Java
Aspose.HTML for Java
charge une page web dans un HTMLDocument et donne accès à ses éléments par l’intermédiaire du DOM HTML. Récupérez les éléments <img>, lisez leur attribut src, résolvez les chemins relatifs par rapport à l’URI de base du document et demandez chaque image avec le service réseau du document.
Ce processus télécharge les octets des ressources référencées par la page sans convertir ni réencoder les images. Les formats JPEG, PNG, GIF, WebP, SVG et les autres formats d’image sont donc conservés tels qu’ils sont renvoyés par le serveur.
Télécharger les images d’un site web en Java
L’exemple ouvre une page web publique, collecte les valeurs src distinctes et enregistre les réponses valides dans le répertoire images. Des préfixes numériques empêchent les fichiers portant le même nom dans leur chemin URL de s’écraser mutuellement.
Extraire des images d’un site web en 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++;
}
}
Étapes pour extraire des images du HTML en Java
- Chargez la page cible avec
HTMLDocument. - Appelez
getElementsByTagName("img")pour récupérer les éléments d’image. - Lisez chaque valeur
srcnon vide et conservez uniquement les sources distinctes. - Résolvez chaque source relative avec
Urletdocument.getBaseURI(). - Envoyez un
RequestMessagepour chaque image et vérifiez leResponseMessage. - Créez un nom local unique et écrivez les octets de la réponse avec
Files.write().
Quelles images peut-on extraire d’un site web ?
L’exemple extrait les ressources réseau référencées directement par l’attribut src des éléments <img>. Il résout également les chemins relatifs, y compris ceux affectés par un élément <base> du document, avant d’envoyer chaque requête. Le même modèle de requête peut être appliqué à d’autres URL de ressources après les avoir trouvées dans le DOM ou les styles CSS.
Pour consulter l’exemple complet de la documentation, lisez Extraire des images d’un site web – Exemples Java .
Points à vérifier lors de l’extraction d’images
- Conservez le format d’image reçu. Le code enregistre le corps de la réponse sans conversion. Lorsqu’une URL ne contient pas d’extension utile, examinez le type de contenu de la réponse et attribuez un nom local approprié.
- Évitez les conflits de noms de fichiers. Des URL d’image différentes peuvent se terminer par le même nom. L’exemple ajoute un préfixe numérique, mais une application de production peut utiliser un hachage ou une autre règle de nommage stable.
- Vérifiez chaque réponse. Une requête d’image peut renvoyer une page d’erreur, une réponse d’authentification, une redirection ou une ressource indisponible au lieu des octets d’une image.
- Prévoyez les ressources volumineuses.
readAsByteArray()met l’image complète en mémoire. Utilisez un traitement en flux lorsque les pages peuvent référencer des fichiers volumineux ou de nombreuses images. - Validez les sources non fiables. Limitez les schémas et les hôtes autorisés lorsque l’URL de la page ou les chemins d’image proviennent d’utilisateurs, et enregistrez les fichiers uniquement dans un répertoire approuvé.
- Respectez les droits d’auteur et les conditions du site web. Extrayez et réutilisez uniquement les images qui vous appartiennent ou pour lesquelles vous disposez d’une autorisation. Leur disponibilité publique n’accorde pas le droit de les copier, de les redistribuer ou de les exploiter commercialement.
Questions fréquentes
1. Comment extraire du HTML les images adaptatives et chargées en différé ?
Examinez src, srcset et les éléments <picture><source>, ainsi que les attributs propres au site tels que data-src qui stockent les URL d’images différées. Résolvez chaque URL sélectionnée par rapport à l’URI de base du document avant de demander la ressource.
2. Comment extraire les images d’arrière-plan CSS d’un site web ?
Recherchez les déclarations background-image dans les feuilles de style externes et les attributs style en ligne. Résolvez chaque valeur CSS url() par rapport à l’URL de base de la feuille de style ou du document, puis demandez et enregistrez séparément la ressource référencée.
3. L’extraction d’images conserve-t-elle les fichiers JPEG, PNG, GIF, WebP et SVG ?
L’enregistrement des octets téléchargés sans réencodage conserve le format d’image renvoyé par le serveur. Si l’URL de la ressource ne contient pas d’extension fiable, utilisez le type de contenu de la réponse pour choisir le nom du fichier local.
4. Aspose.HTML for Java peut-il extraire les icônes d’un site web ?
Les icônes d’un site web sont généralement référencées par des éléments <link> dont la valeur rel contient icon. Récupérez ces éléments, lisez leurs attributs href, résolvez les URL relatives et téléchargez les ressources avec le service réseau du document.
Installer Aspose.HTML for Java
Ajoutez Aspose.HTML for Java depuis le dépôt officiel Aspose. Remplacez ASPOSE_HTML_VERSION par un numéro de version exact indiqué sur la page des
versions d’Aspose.HTML for Java
, puis rechargez ou reconstruisez le projet afin de résoudre la dépendance.
Ajoutez le dépôt et la dépendance au projet 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>Ajoutez le dépôt et la dépendance au projet Gradle :
Gradle – build.gradle
repositories {
maven {
url = uri('https://releases.aspose.com/java/repo/')
}
}
dependencies {
implementation 'com.aspose:aspose-html:ASPOSE_HTML_VERSION'
}Utilisez une version du JDK compatible avec la version sélectionnée. Pour l’installation manuelle du fichier JAR, Kotlin DSL, les mises à jour et la résolution des problèmes de dépendances, consultez Installer Aspose.HTML for Java .
Tâches Java associées à l’extraction de données
Poursuivez avec le téléchargement depuis une URL, l’extraction de SVG, la page principale d’extraction de données ou Aspose.HTML for Java.