Mengekstrak Gambar dari Situs Web dengan Java

Aspose.HTML for Java memuat halaman web ke dalam HTMLDocument dan menyediakan akses ke elemennya melalui DOM HTML. Kumpulkan elemen <img>, baca atribut src masing-masing, ubah path relatif menjadi URL absolut berdasarkan URI dasar dokumen, lalu minta setiap gambar melalui layanan jaringan dokumen.

Proses ini mengunduh byte sumber daya yang dirujuk oleh halaman tanpa mengonversi atau mengodekan ulang gambar. Dengan demikian, JPEG, PNG, GIF, WebP, SVG, dan format gambar lainnya tetap dalam bentuk yang dikembalikan oleh server.


Unduh Gambar Situs Web dengan Java

Contoh ini membuka halaman web publik, mengumpulkan nilai src unik, lalu menyimpan respons yang berhasil ke direktori images. Awalan angka mencegah file dengan nama path URL yang sama saling menimpa.

Ekstrak Gambar dari Situs Web dengan 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++;
    }
}

Langkah Mengekstrak Gambar dari HTML dengan Java

  1. Muat halaman tujuan dengan HTMLDocument .
  2. Panggil getElementsByTagName("img") untuk mengumpulkan elemen gambar.
  3. Baca setiap nilai src yang tidak kosong dan pertahankan hanya sumber yang unik.
  4. Ubah setiap sumber relatif menjadi URL absolut dengan Url dan document.getBaseURI().
  5. Kirim RequestMessage untuk setiap gambar dan periksa ResponseMessage .
  6. Buat nama lokal yang unik dan tulis byte respons dengan Files.write().

Gambar yang Dapat Diekstrak dari Situs Web

Contoh ini mengekstrak sumber daya jaringan yang dirujuk langsung oleh atribut src pada elemen <img>. Contoh juga mengubah path relatif menjadi URL absolut, termasuk path yang dipengaruhi elemen <base> dokumen, sebelum mengirim setiap permintaan. Pola permintaan yang sama dapat diterapkan pada URL sumber daya lain setelah URL tersebut ditemukan dalam DOM atau CSS.

Untuk contoh dokumentasi lengkap, baca Extract Images From Website in Java .


Hal Penting Saat Mengekstrak Gambar

  • Pertahankan format gambar yang diterima. Kode menyimpan isi respons tanpa konversi. Jika URL tidak memiliki ekstensi yang berguna, periksa content type respons dan tetapkan nama lokal yang sesuai.
  • Hindari benturan nama file. URL gambar yang berbeda dapat berakhir dengan nama file yang sama. Contoh menambahkan awalan angka, sedangkan aplikasi produksi dapat menggunakan hash atau aturan penamaan stabil lainnya.
  • Periksa setiap respons. Permintaan gambar dapat mengembalikan halaman kesalahan, respons autentikasi, pengalihan, atau sumber daya yang tidak tersedia, bukan byte gambar.
  • Siapkan penanganan sumber daya besar. readAsByteArray() menyimpan seluruh gambar di memori. Gunakan strategi streaming jika halaman dapat merujuk file besar atau banyak gambar.
  • Validasi sumber yang tidak tepercaya. Batasi skema dan host yang diizinkan jika URL halaman atau path gambar berasal dari pengguna, dan simpan file hanya di direktori yang disetujui.
  • Hormati hak cipta dan ketentuan situs web. Ekstrak dan gunakan kembali hanya gambar milik Anda atau gambar yang boleh Anda akses. Ketersediaan publik tidak memberikan izin untuk menyalin, mendistribusikan ulang, atau menggunakan gambar secara komersial.

Tanya Jawab

1. Bagaimana cara mengekstrak gambar responsif dan gambar dengan lazy loading dari HTML?

Periksa src, srcset, dan elemen <picture><source>, serta atribut khusus situs seperti data-src yang menyimpan URL gambar tertunda. Ubah setiap URL yang dipilih menjadi URL absolut berdasarkan URI dasar dokumen sebelum meminta sumber daya gambar.

2. Bagaimana cara mengekstrak gambar latar CSS dari situs web?

Periksa stylesheet eksternal dan atribut style inline untuk menemukan deklarasi background-image. Ubah setiap nilai CSS url() menjadi URL absolut berdasarkan URL dasar stylesheet atau dokumen, lalu minta dan simpan sumber daya yang dirujuk secara terpisah.

3. Apakah ekstraksi gambar mempertahankan file JPEG, PNG, GIF, WebP, dan SVG?

Menulis byte respons yang diunduh tanpa pengodean ulang akan mempertahankan format gambar yang dikembalikan oleh server. Jika URL sumber daya tidak memiliki ekstensi yang dapat diandalkan, gunakan content type respons untuk menentukan nama file lokal.

4. Dapatkah Aspose.HTML for Java mengekstrak ikon situs web?

Ikon situs web umumnya dirujuk oleh elemen <link> yang nilai rel-nya memuat icon. Kumpulkan elemen tersebut, baca atribut href, ubah URL relatif menjadi URL absolut, lalu unduh sumber dayanya melalui layanan jaringan dokumen.


Instal Aspose.HTML for Java

Tambahkan Aspose.HTML for Java dari repositori resmi Aspose. Ganti ASPOSE_HTML_VERSION dengan nomor versi yang tepat dari halaman rilis Aspose.HTML for Java , lalu muat ulang atau bangun ulang proyek agar dependensi dapat diselesaikan.

Tambahkan repositori dan dependensi ke proyek 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>

Tambahkan repositori dan dependensi ke proyek Gradle:

Gradle – build.gradle

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

Gunakan JDK yang kompatibel dengan rilis yang dipilih. Untuk instalasi JAR secara manual, Kotlin DSL, pembaruan, dan pemecahan masalah dependensi, lihat Install Aspose.HTML for Java .

Tugas Ekstraksi Data Java Terkait

Lanjutkan dengan pengunduhan dari URL, ekstraksi SVG, halaman utama ekstraksi data, atau Aspose.HTML for Java.