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
'파이썬 코딩 한줄' 카테고리의 다른 글
[pandas apply] 텍스트를 일정 길이만큼 잘라서 분리하기 (0) | 2022.10.14 |
---|---|
아직도 셀레니움(Selenium)에서 벗어나지 못했다면... (0) | 2022.10.10 |
파이썬 groupby로 요소 모아 보기 (단순 집계 이상으로 활용하기) (0) | 2022.09.21 |
파이썬 print와 return의 차이가 헷깔리는 이유는? (0) | 2022.02.26 |
주피터노트북에서 그래프 사용 시 문제 해결 Tip (0) | 2022.02.18 |