파이썬 코딩 한줄

이미지 URL에서 이미지 파일 다운받기

soopy 2022. 9. 16. 19:20
728x90

 

아래와 같이 urllib 모듈을 활용하면 이미지 URL에서 이미지 파일을 다운받을 수 있다.

import urllib.request

url = "이미지URL"
urllib.request.urlretrieve(url, '저장경로/저장할파일명.jpg')

 

하지만 가져오려는 이미지 URL에 한글이 섞여있을 때도 있다.
url = 'https://abc.com/group/사진/젓갈01.jpg' 과 같이 말이다 (예시)

 

requests 과정에서 한글이 섞긴 URL을 get하려 할 경우 ASCii 코드 문제를 언급하며 오류가 발생한다.
이럴 경우 아래와 같이 url에서 한글인 부분을 해시코드와 같은 형태로 바꿔주는 작업이 필요하다.

 

def transfrom_url(url):
    from urllib.parse import urlsplit, quote

    url_info = urlsplit(url)
    encoded_url = f'{url_info.scheme}://{url_info.netloc}{quote(url_info.path)}'
    
    return encoded_url

 

위 코드를 보면 urlsplit 이라는 모듈을 통해 scheme 부분, netlocation 부분, path 부분 등 전체 url을 따로 split해주는 기능을 한다.
그런 뒤 quote 모듈을 통해 한글은 해시코드 형태로 변경시켜주도록 한다. 주로 url의 path단에서 한글이 사용되는 경우가 많으므로 해당 부분에 quote를 입혀준 것을 확인할 수 있다.

 

결론적으로 아래와 같이 작성한다면 한글 URL로 된 이미지를 가져오는 것도 문제 없을 것이다.

import urllib.request
from urllib.parse import urlsplit, quote
# 한글 url을 request로 접근 시도 시 인식 가능하도록 한글에 해시함수를 적용한 새로운 url을 출력해준다.

def transfrom_url(url):

    url_info = urlsplit(url)
    encoded_url = f'{url_info.scheme}://{url_info.netloc}{quote(url_info.path)}'
    
    return encoded_url

# 함수 적용
url = transform_url('https://abc.com/group/사진/젓갈01.jpg')

# 이미지 다운로드
urllib.request.urlretrieve(url, '저장경로/저장할파일명.jpg')
728x90
728x90