Bilder von einer Website in Java extrahieren

Aspose.HTML for Java lädt eine Webseite in ein HTMLDocument und stellt ihre Elemente über das HTML-DOM bereit. Sammeln Sie die <img>-Elemente, lesen Sie deren src-Attribute, lösen Sie relative Pfade anhand der Basis-URI des Dokuments auf und fordern Sie jedes Bild über den Netzwerkdienst des Dokuments an.

Dabei werden die von der Seite referenzierten Ressourcendaten heruntergeladen. Die Bilder werden weder konvertiert noch neu codiert. JPEG, PNG, GIF, WebP, SVG und weitere Bildformate bleiben daher in der vom Server zurückgegebenen Form erhalten.


Website-Bilder in Java herunterladen

Das Beispiel öffnet eine öffentliche Webseite, sammelt eindeutige src-Werte und speichert erfolgreiche Antworten im Verzeichnis images. Numerische Präfixe verhindern, dass Dateien mit demselben Namen im URL-Pfad einander überschreiben.

Bilder von einer Website in Java extrahieren

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++;
    }
}

Bilder aus HTML in Java extrahieren

  1. Laden Sie die Zielseite mit HTMLDocument .
  2. Rufen Sie getElementsByTagName("img") auf, um die Bildelemente zu sammeln.
  3. Lesen Sie alle nicht leeren src-Werte und behalten Sie nur eindeutige Quellen.
  4. Lösen Sie jede relative Quelle mit Url und document.getBaseURI() auf.
  5. Senden Sie für jedes Bild eine RequestMessage und prüfen Sie die ResponseMessage .
  6. Erzeugen Sie einen eindeutigen lokalen Namen und schreiben Sie die Antwortdaten mit Files.write().

Welche Bilder lassen sich aus einer Website extrahieren?

Das Beispiel extrahiert Netzwerkressourcen, auf die das src-Attribut von <img>-Elementen direkt verweist. Vor jeder Anfrage löst es relative Pfade auf. Dabei werden auch Pfade berücksichtigt, die durch ein <base>-Element des Dokuments beeinflusst werden. Dasselbe Anfrageverfahren kann für andere Ressourcen-URLs verwendet werden, nachdem sie im DOM oder in CSS gefunden wurden.

Das vollständige Dokumentationsbeispiel finden Sie unter Bilder aus einer Website extrahieren .


Wichtige Hinweise zur Bildextraktion

  • Behalten Sie das empfangene Bildformat bei. Der Code speichert den Antwortinhalt ohne Konvertierung. Enthält die URL keine geeignete Erweiterung, prüfen Sie den Inhaltstyp der Antwort und vergeben Sie einen passenden lokalen Dateinamen.
  • Vermeiden Sie Namenskonflikte. Unterschiedliche Bild-URLs können mit demselben Dateinamen enden. Das Beispiel fügt ein numerisches Präfix hinzu. Produktivsysteme können stattdessen einen Hash oder eine andere stabile Benennungsregel verwenden.
  • Prüfen Sie jede Antwort. Eine Bildanfrage kann statt der Bilddaten eine Fehlerseite, eine Authentifizierungsantwort, eine Weiterleitung oder eine nicht verfügbare Ressource liefern.
  • Berücksichtigen Sie große Ressourcen. readAsByteArray() puffert das vollständige Bild im Speicher. Verwenden Sie eine Streaming-Strategie, wenn Seiten viele Bilder oder große Dateien referenzieren können.
  • Validieren Sie nicht vertrauenswürdige Quellen. Beschränken Sie zulässige Schemas und Hosts, wenn die Seiten-URL oder Bildpfade von Benutzern stammen, und speichern Sie Dateien nur in einem freigegebenen Verzeichnis.
  • Beachten Sie Urheberrecht und Nutzungsbedingungen. Extrahieren und verwenden Sie nur eigene Bilder oder Ressourcen, für die Sie eine Erlaubnis besitzen. Die öffentliche Verfügbarkeit erlaubt nicht automatisch das Kopieren, Weitergeben oder kommerzielle Verwenden eines Bildes.

Häufig gestellte Fragen

1. Wie lassen sich responsive und verzögert geladene Bilder extrahieren?

Prüfen Sie src, srcset und <picture><source> sowie seitenspezifische Attribute wie data-src, in denen URLs für verzögert geladene Bilder gespeichert werden. Lösen Sie jede ausgewählte URL vor dem Abruf anhand der Basis-URI des Dokuments auf.

2. Wie lassen sich CSS-Hintergrundbilder aus einer Website extrahieren?

Untersuchen Sie externe Stylesheets und Inline-Attribute style auf background-image-Deklarationen. Lösen Sie jeden CSS-Wert url() anhand der Basis-URL des Stylesheets oder Dokuments auf und laden Sie die referenzierte Ressource anschließend separat herunter.

3. Bleiben JPEG-, PNG-, GIF-, WebP- und SVG-Formate bei der Extraktion erhalten?

Das Speichern der empfangenen Antwortdaten ohne erneute Codierung erhält das vom Server zurückgegebene Bildformat. Enthält die Ressourcen-URL keine zuverlässige Erweiterung, verwenden Sie den Inhaltstyp der Antwort, um den lokalen Dateinamen festzulegen.

4. Kann Aspose.HTML for Java Website-Icons extrahieren?

Website-Icons werden üblicherweise durch <link>-Elemente referenziert, deren Wert rel den Bestandteil icon enthält. Sammeln Sie diese Elemente, lesen Sie ihre href-Attribute, lösen Sie relative URLs auf und laden Sie die Ressourcen über den Netzwerkdienst des Dokuments herunter.


Aspose.HTML for Java installieren

Fügen Sie Aspose.HTML for Java aus dem offiziellen Aspose-Repository hinzu. Ersetzen Sie ASPOSE_HTML_VERSION durch eine genaue Versionsnummer von der Seite Aspose.HTML for Java-Releases und laden oder erstellen Sie das Projekt anschließend neu, damit die Abhängigkeit aufgelöst wird.

Fügen Sie das Repository und die Abhängigkeit zum Maven-Projekt hinzu:

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>

Fügen Sie das Repository und die Abhängigkeit zum Gradle-Projekt hinzu:

Gradle – build.gradle

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

Verwenden Sie ein JDK, das mit dem ausgewählten Release kompatibel ist. Hinweise zur manuellen JAR-Installation, Kotlin DSL, Updates und zur Fehlerbehebung bei Abhängigkeiten finden Sie unter Aspose.HTML for Java installieren .

Verwandte Aufgaben zur Datenextraktion in Java

Weiter zu URL-Downloads, SVG-Extraktion, der Übersicht zur Datenextraktion oder zu Aspose.HTML for Java.