Before 2022/Java & Spring

Jsoup를 활용한 게티이미지 썸네일 크롤링

Eljoe 2019. 4. 3. 15:23

게티이미지 사이트

해당 사이트의 썸네일 이미지를 크롤링하여 파일로 저장하는 방법을 적어두려한다.

 

Collaboration ストックフォトと画像 | Getty Images

複数素材のダウンロード 複数の素材をダウンロードするには、該当する絞り込み機能のフィルターをオンにしてください。

www.gettyimages.co.jp

 

구조를 파악하기 위해 일단 F12를 클릭한다.

 

구조를 파악해보자면, 썸네일 이미지들을 클래스 이름이 search-results인 section 태그가 감싸는 형태이며

각각의 썸네일 이미지 태그는 img src="...." 형식으로 되어있는 것을 볼 수 있다. 

 

소스는 아래와 같다.

import org.jsoup.Jsoup
import org.jsoup.select.Elements
import java.io.File
import java.net.URL
import javax.imageio.ImageIO

private const val GETTY_URL: String =
    "https://www.gettyimages.co.jp/%E5%86%99%E7%9C%9F" +
            "/collaboration?mediatype=photography&phrase=collaboration&sort=mostpopular"

fun imgAccessFromURL(URL: String, query: String = "img"): Elements =
    Jsoup.connect(URL)
        .userAgent("Mozilla")
        .get()
        .select(query)

// 확장함수
fun Elements.saveImage(dir: String = """c:\img\""", extension: String = "jpg") {
    if (this.isNotEmpty()) {
        if (!File(dir).exists()) File(dir).mkdirs()

        for ((index, element) in this.withIndex()) {
            val imageAttr = URL(element.attr("src"))

            val bufferedImage = ImageIO.read(imageAttr)

            ImageIO.write(bufferedImage, extension, File("$dir$index.$extension"))
            println("$dir$index.$extension is Saved!")

            Thread.sleep(1000)
        }
    } else {
        println(" tag is not found!")
    }
}

fun main() {
    imgAccessFromURL(GETTY_URL, ".search-results img[src]").saveImage()
}

 

결과화면