Вилучення зображень із сайту в Java

Aspose.HTML for Java завантажує вебсторінку в HTMLDocument і надає доступ до її елементів через HTML DOM. Зберіть елементи <img>, прочитайте кожен атрибут src, перетворіть відносні шляхи на абсолютні URL щодо базового URI документа та запитайте кожне зображення через мережеву службу документа.

Цей процес завантажує байти ресурсів, на які посилається сторінка, без конвертування чи повторного кодування зображень. JPEG, PNG, GIF, WebP, SVG та інші формати зберігаються в тому вигляді, у якому їх повернув сервер.


Завантаження зображень із сайту в Java

Приклад відкриває загальнодоступну вебсторінку, збирає унікальні значення src і зберігає успішні відповіді в каталозі images. Числові префікси не дають файлам з однаковим ім’ям у шляху URL перезаписувати один одного.

Вилучити зображення із сайту в 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++;
    }
}

Етапи вилучення зображень з HTML у Java

  1. Завантажте цільову сторінку за допомогою HTMLDocument .
  2. Викличте getElementsByTagName("img") , щоб зібрати елементи зображень.
  3. Прочитайте кожне непорожнє значення src і залиште лише унікальні джерела.
  4. Перетворіть кожне відносне джерело на абсолютний URL за допомогою Url і document.getBaseURI().
  5. Надішліть RequestMessage для кожного зображення та перевірте ResponseMessage .
  6. Створіть унікальне локальне ім’я та запишіть байти відповіді за допомогою Files.write().

Які зображення можна вилучити із сайту?

Приклад вилучає мережеві ресурси, на які безпосередньо посилається атрибут src елементів <img>. Перед надсиланням кожного запиту він також перетворює відносні шляхи на абсолютні URL, зокрема шляхи, на які впливає елемент <base> документа. Той самий шаблон запиту можна застосувати до інших URL ресурсів після їх пошуку в DOM або CSS.

Повний приклад наведено в документації Extract Images From Website in Java .


Що врахувати під час вилучення зображень

  • Зберігайте отриманий формат. Код записує тіло відповіді без конвертування. Якщо URL не має надійного розширення, перевірте тип вмісту відповіді та призначте відповідне локальне ім’я.
  • Уникайте збігів імен файлів. Різні URL зображень можуть закінчуватися однаковим ім’ям. Приклад додає числовий префікс, але робочий застосунок може використовувати хеш або інше стабільне правило іменування.
  • Перевіряйте кожну відповідь. Запит зображення може повернути сторінку помилки, відповідь автентифікації, перенаправлення або недоступний ресурс замість байтів зображення.
  • Плануйте роботу з великими ресурсами. readAsByteArray() буферизує все зображення в пам’яті. Використовуйте потокову обробку, якщо сторінки можуть посилатися на великі файли або багато зображень.
  • Перевіряйте ненадійні джерела. Обмежуйте дозволені схеми та хости, якщо URL сторінки або шляхи зображень надходять від користувачів, і зберігайте файли лише в дозволеному каталозі.
  • Дотримуйтеся авторського права та умов сайту. Вилучайте й повторно використовуйте лише власні зображення або ті, на які маєте дозвіл. Загальнодоступність не надає права копіювати, розповсюджувати чи комерційно використовувати зображення.

Поширені запитання

1. Як вилучити з HTML адаптивні зображення та зображення з відкладеним завантаженням?

Перевірте src, srcset і елементи <picture><source>, а також специфічні для сторінки атрибути на кшталт data-src, у яких зберігаються URL відкладених зображень. Перетворіть кожен вибраний URL на абсолютний щодо базового URI документа, перш ніж запитувати ресурс.

2. Як вилучити фонові зображення CSS із вебсайту в Java?

Перевірте зовнішні таблиці стилів і вбудовані атрибути style на наявність оголошень background-image. Перетворіть кожне значення CSS url() на абсолютний URL щодо адреси таблиці стилів або документа, а потім окремо запитайте й збережіть пов’язаний ресурс.

3. Чи зберігаються файли JPEG, PNG, GIF, WebP або SVG під час вилучення зображень?

Запис завантажених байтів без повторного кодування зберігає формат зображення, який повернув сервер. Якщо URL ресурсу не містить надійного розширення, скористайтеся типом вмісту відповіді, щоб вибрати ім’я локального файлу.

4. Чи може Aspose.HTML for Java вилучати іконки вебсайту?

Іконки вебсайту зазвичай задаються елементами <link>, значення rel яких містить icon. Зберіть ці елементи, прочитайте атрибути href, перетворіть відносні URL на абсолютні та завантажте ресурси через мережеву службу документа.


Встановлення Aspose.HTML for Java

Додайте Aspose.HTML for Java з офіційного репозиторію Aspose. Замініть ASPOSE_HTML_VERSION точним номером версії зі сторінки випусків Aspose.HTML for Java , а потім перезавантажте або перебудуйте проєкт, щоб система залежностей завантажила бібліотеку.

Додайте репозиторій і залежність до проєкту 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>

Додайте репозиторій і залежність до проєкту Gradle:

Gradle – build.gradle

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

Використовуйте JDK, сумісний із вибраним випуском. Інструкції щодо встановлення JAR вручну, Kotlin DSL, оновлення й усунення проблем із залежностями наведено в посібнику Встановлення Aspose.HTML for Java .

Пов’язані завдання з вилучення даних у Java

Перейдіть до завантаження за URL, вилучення SVG, огляду вилучення даних або Aspose.HTML for Java API.