はじめに
Web上の画像を収集・表示・保存したいというニーズは、ポートフォリオ制作や機械学習の準備など、さまざまな場面で発生します。
本記事では、Javaを使って以下の流れを実装する方法を紹介します。
- Jsoupで画像URLをスクレイピング
- BufferedImageで画像を読み込み表示
- ローカルに画像を保存
Java初心者〜中級者にも理解しやすいよう、コード付きで丁寧に解説します。
使用ライブラリと開発環境
- Java 11以降
- Jsoup(HTMLパーサー)
- 標準ライブラリのImageIO, BufferedImage など
Maven依存関係(pom.xml)
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.17.2</version>
</dependency>
画像URLを取得する(Jsoup)
まずは、HTML内の<img>
タグをすべて取得し、画像URLを取り出します。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.List;
public class ImageScraper {
public static List<String> scrapeImageUrls(String url) throws Exception {
Document doc = Jsoup.connect(url).get();
Elements imgs = doc.select("img[src]");
List<String> imageUrls = new ArrayList<>();
for (Element img : imgs) {
String absUrl = img.absUrl("src");
imageUrls.add(absUrl);
}
return imageUrls;
}
}
画像を表示&保存(BufferedImage)
取得した画像URLを使って、画像を表示&保存してみましょう。
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
import java.util.List;
public class ImageViewer {
public static void main(String[] args) throws Exception {
String targetUrl = "https://example.com"; // スクレイピング対象
List<String> imageUrls = ImageScraper.scrapeImageUrls(targetUrl);
int count = 1;
for (String imageUrl : imageUrls) {
BufferedImage image = ImageIO.read(new URL(imageUrl));
if (image == null) continue;
// 表示
JFrame frame = new JFrame("Image Viewer");
frame.getContentPane().add(new JLabel(new ImageIcon(image)));
frame.pack();
frame.setVisible(true);
// 保存
File output = new File("downloaded_image_" + count + ".jpg");
ImageIO.write(image, "jpg", output);
System.out.println("保存しました: " + output.getAbsolutePath());
count++;
Thread.sleep(2000); // 2秒ごとに次の画像へ(表示確認のため)
frame.dispose();
}
}
}
注意点
- URLが
https:
ではない場合は読み込みに失敗することがあります。 - サイトによってはスクレイピングが禁止されている場合があります(robots.txtを確認)。
- ファイル保存形式(JPG, PNG)に注意しましょう。
まとめ
Javaを使えば、画像のスクレイピングから表示、保存までをシンプルに実装できます。
この方法を応用すれば、画像収集ツールや画像付きポートフォリオの自動生成など、幅広い用途に活用できます。