[go] Go 언어로 이미지 크롤링하기
인터넷에는 다양한 이미지들이 존재하며, 이러한 이미지들을 자동으로 다운로드하기 위해 이미지 크롤링은 유용한 기술입니다. 이번 블로그 포스트에서는 Go 언어를 사용하여 이미지 크롤링을 하는 방법에 대해 알아보겠습니다.
1. 필요한 패키지 가져오기
Go 언어에서는 이미지를 다운로드하기 위해 net/http
패키지와 HTML을 파싱하기 위해 golang.org/x/net/html
패키지를 사용합니다. 이 패키지들을 가져오기 위해 import
문을 사용합니다.
import (
"net/http"
"golang.org/x/net/html"
)
2. 이미지 URL 추출하기
우리는 웹 페이지에서 이미지 URL을 추출한 후, 이 URL을 사용하여 이미지를 다운로드할 것입니다. 이를 위해 HTML을 파싱하여 이미지 URL을 추출하는 함수를 작성합니다.
func extractImageURLs(url string) ([]string, error) {
// HTTP GET 요청 보내기
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
// HTML 파싱하기
doc, err := html.Parse(resp.Body)
if err != nil {
return nil, err
}
// 이미지 URL 추출하기
var urls []string
var extract func(*html.Node)
extract = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "img" {
for _, attr := range n.Attr {
if attr.Key == "src" {
urls = append(urls, attr.Val)
}
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
extract(c)
}
}
extract(doc)
return urls, nil
}
3. 이미지 다운로드하기
이미지 URL을 추출했으면, 이제 실제로 이미지를 다운로드하는 함수를 작성합니다.
func downloadImage(url string) error {
// HTTP GET 요청 보내기
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
// 이미지 파일 저장하기
file, err := os.Create("image.jpg")
if err != nil {
return err
}
defer file.Close()
// 이미지 복사하기
_, err = io.Copy(file, resp.Body)
if err != nil {
return err
}
return nil
}
4. 예제 실행하기
이제 위에서 작성한 함수들을 사용하여 이미지 크롤링을 실행해보겠습니다.
func main() {
// 웹 페이지에서 이미지 URL 추출하기
urls, err := extractImageURLs("https://example.com")
if err != nil {
log.Fatal(err)
}
// 이미지 다운로드하기
for _, url := range urls {
err := downloadImage(url)
if err != nil {
log.Println(err)
}
}
}
위 코드를 실행하면 주어진 웹 페이지에서 모든 이미지를 다운로드할 수 있습니다.
이제 Go 언어로 이미지 크롤링을 할 준비가 되었습니다. 이 예제를 통해 웹 페이지에서 이미지를 추출하고 다운로드하는 방법을 배울 수 있습니다. 간단한 예제이지만, 이를 바탕으로 좀 더 복잡한 크롤러를 작성할 수도 있습니다.
더 자세한 내용은 Go 언어 공식 문서와 관련 블로그를 참조하시기 바랍니다.