일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 유니폼 자수 마킹
- 부산청년센터 후기
- 중진공 인턴 면접
- 전미르
- 전준우
- 롯데
- 김태형
- 중소벤처기업진흥공단 인턴 면접 후기
- Python
- 파이썬
- 중진공 인턴 면접 후기
- 황성빈
- 에스더버니데이
- flask 사용법
- flask 튜토리얼
- 윌커슨
- flask 프로젝트
- 웹 프레임워크
- flask 실습
- 중소벤처기업진흥공단 면접 후기
- python openapi
- 제일컴퓨터자수 유니폼
- 중소벤처기업진흥공단 인턴
- FLASK
- 롯데자이언츠
- 중소벤처기업진흥공단 인턴 면접
- 자갈치 부산청년센터
- 웹개발
- 중진공 인턴
- 중진공 면접 후기
- Today
- Total
나의 모두 기록
[Python] 한글 URL 인코딩 (+URL로 이미지 출력) 본문
OpenAPI를 요청하기 위해 URL을 만드는 과정에서 한글을 인코딩하지 않아 오류가 발생하였습니다.
이번 글에서는 Python에서 한글을 인코딩하는 방법과 추가로 URL로 이미지를 출력하는 방법에 대해 알아보도록 하겠습니다. 코드는 던전앤파이터 API를 예시로 작성하였습니다.
한글 URL 인코딩 방법
from urllib.request import urlopen
# API Key 지정
key = "API_KEY"
serverId = 'casillas'
characterName = '대연동짱주먹'
url = f'https://api.neople.co.kr/df/servers/{serverId}/characters?characterName={characterName}&apikey={key}'
result_html = urlopen(url).read()
이 코드를 실행하면 아래와 같은 오류가 발생합니다. "UnicodeEncodeError: 'ascii' codec can't encode characters in position 50-52: ordinal not in range(128)"
이는 일반적으로 URL에 한글 또는 특수문자와 같은 ASCII 이외의 문자가 포함되어 있을 때 발생합니다. URL은 ASCII 문자셋으로만 구성되어야 하며, 다른 문자들은 URL 인코딩을 통해 ASCII 문자로 변환되어야 합니다.
이러한 문제를 해결하기 위해서는 파이썬의 urllib 라이브러리를 사용하여 URL을 인코딩해야 합니다. urllib.parse 모듈의 quote() 함수를 사용하면 URL에 포함된 한글이나 특수문자를 인코딩할 수 있습니다.
from urllib.parse import quote
import json
characterName = quote(characterName)
url = f'https://api.neople.co.kr/df/servers/{serverId}/characters?characterName={characterName}&apikey={key}'
print(characterName, end='\n\n')
result_html = urlopen(url).read()
result_json = json.loads(result_html)
print(json.dumps(result_json, indent=4))
첫 번째 줄은 quote를 이용하여 인코딩한 결과이며, 이제 정상적으로 호출되는 모습을 확인할 수 있습니다.
print(json.dumps(result_json, indent=4, ensure_ascii=False))
또한 다음과 같이 json.dumps() 함수의 ensure_ascii 매개 변수를 False로 설정하면 출력할 때 유니코드 문자를 그대로 출력할 수 있습니다.
URL로 이미지를 출력하는 방법
이번 API에서는 characterId를 이용해 캐릭터 이미지를 출력할 수 있었습니다. 추가로 파이썬으로 URL에서 이미지를 가져와 주피터 노트북에서 출력하는 방법에 대해 간단하게 살펴보도록 하겠습니다.
import requests
from PIL import Image
from io import BytesIO
import IPython.display as display
characterId = result_json['rows'][0]['characterId']
zoom=1
url = f'https://img-api.neople.co.kr/df/servers/{serverId}/characters/{characterId}?zoom={zoom}'
response = requests.get(url)
image = Image.open(BytesIO(response.content))
display.display(image)
우선 이미지를 가져오기 위해 requests 라이브러리를 사용하며, 이미지를 처리하기 위해 PIL 라이브러리를 불러옵니다.
requests.get() 함수를 사용하여 지정된 URL에서 이미지 데이터를 가져옵니다. 그리고 PIL의 Image.open() 함수를 사용하여 이미지를 엽니다. 마지막으로 IPython.display 모듈의 display() 함수를 사용하여 이미지를 주피터 노트북에서 출력합니다.
오늘은 파이썬에서 한글 URL을 인코딩하는 방법과 URL로 이미지를 출력하는 방법에 대해 알아보았습니다.
글은 여기서 마치도록 하겠습니다. 읽어주셔서 감사합니다 :)
'정보 > Python' 카테고리의 다른 글
[Flask] 2. 라우팅과 템플릿 사용하기 (0) | 2024.10.09 |
---|---|
[Flask] 1. 웹 애플리케이션 첫 걸음 (1) | 2024.10.09 |
[Python] 도로명 주소를 위경도로 변환하기 (0) | 2023.05.24 |
[Python] json 형식을 데이터프레임으로 변환하기 (0) | 2023.05.11 |