(Tempo di lettura: 1 - 2 minuti)
Qualche giorno fa mi sono chiesto se fosse possibile scaricare tramite un programma Java tutte le immagini presenti su una pagina web, dopo varie ricerche ho trovato la il comodo Jsoup che permette di fare il parsing dell'HTML. Con poche modifiche ad un tutorial preso da sito degli sviluppatori ho realizzato questo semplice programmino.
package kravenor.myimage;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JavaImageDownloader {
public static void main(String[] args) {
	try {
		URL url;
		Document doc = Jsoup.connect("http://kravenor.altervista.org").get();
        Elements links = doc.select("a[href]");
        Elements media = doc.select("[src]");
        Elements imports = doc.select("link[href]");
        for (Element src : media) {
            if (src.tagName().equals("img")){
                print(" * %s: <%s>  ",src.tagName(), src.attr("abs:src"));
            	url=new URL(src.attr("abs:src"));
            	InputStream in = new BufferedInputStream(url.openStream());
            	ByteArrayOutputStream out = new ByteArrayOutputStream();
            	byte[] buf = new byte[1024];
            	int n = 0;
            	while (-1!=(n=in.read(buf)))
            	{
            	   out.write(buf, 0, n);
            	}
            	out.close();
            	in.close();
            	byte[] response = out.toByteArray();
            	FileOutputStream fos = new FileOutputStream("directory_to_save_in"+trim(src.attr("abs:src"),5));
                fos.write(response);
                fos.close();
            
            }
        
        }
		
	
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}
private static void print(String msg, Object... args) {
    System.out.println(String.format(msg, args));
}
private static String trim(String s, int width) {
    if (s.length() > width)
        return s.substring(s.length()-width, s.length()) + ".";
    else
        return s;
}
}

Riferimenti