python에서 dictionary로 URL query string 처리하는 2가지 방법

Python에서 dictionary 형태의 데이터를 문자열 형태의 쿼리 스트링으로 처리해야 하는 경우가 생깁니다. urlencode를 사용하여 query string을 만드는 방법과, requests 패키지 사용시의 처리 방법을 알아보겠습니다.

urllib.parse의 urlencode사용하여 query string 만들기

urllib.parse의 urlencode를 사용하면 dictionary 형태의 데이터를 간단히 쿼리 스트링 형태의 문자열로 만들 수 있습니다. 이 방식을 사용하려면 urllib.parse.urlencode를 import 해 주어야 합니다.

from urllib.parse import urlencode

params = {
  "from": 20,
  "to": 50,
}

query_string = urlencode(params)
print(query_string)
Python

위와 같은 코드를 사용하면 아래와 같이 출력됩니다. 결과 문자열은 key=value 형태의 쌍으로 표현되며 앰퍼샌드(&) 부호를 사용해서 연결합니다.

그림 1. Python dict to URL query string
그림 1. Python dict to URL 쿼리 스트링

이번에는 파라미터에 따라 쿼리 문자열이 다르게 인코딩되는 것을 확인할 수 있습니다. urlencode 함수는 quote_via 라는 파라미터를 제공하는 기본적으로 urllib.parse.quote_plus를 사용합니다.

from urllib.parse import urlencode

params = {
  "title": "Very Important Problem/Person",
  "count": 23
}

query_string = urlencode(params)
print(query_string)
Python

quote_via 파라미터는 함수를 전달하게 되어 있는데 기본적으로 quote_plus를 이용한다고 했습니다. 그래서 아래 그림과 같이 빈 칸( )은 플러스 기호(+)로 변환되며, 슬래시(/)는 %2F로 변환된 것을 확인할 수 있습니다.

그림 2. urllib.parse.urlencode quote_via 함수 quote_plus 사용
그림 2. urllib.parse.urlencode quote_via 함수 quote_plus 사용

이번에는 quote_via에 quote 함수를 전달해 보도록 하겠습니다.

from urllib.parse import urlencode, quote

params = {
  "title": "Very Important Problem/Person",
  "count": 23
}

query_string = urlencode(params, quote_via=quote)
print(query_string)
Python

이번에는 빈 칸( )이 %20으로 변환된 것을 확인할 수 있습니다.

그림 3. urllib.parse.urlencode quote_via 함수 quote 사용
그림 3. urllib.parse.urlencode quote_via 함수 quote 사용

여러분이 사용하고자 하는 방식이 어떤 방식이냐에 따라 적절하게 quote_via 함수를 설정해 주시면 됩니다.

requests를 사용하는 경우

그런데 만약 requests를 사용하여 query string을 전달해야 하는 상황이라면, 굳이 문자열로 변환할 필요가 없습니다. 이 경우에는 아래와 같이 그냥 params값으로 해당 딕셔너리 자체를 넣어주면 requests.get 내부에서 dictionary 형태의 값들을 쿼리 문자열로 알아서 변환해 주기 때문입니다.

import requests

params = {
  "from": 20,
  "to": 50,
}

requests.get(url, params=params)
Python

관련 자료

Requests 홈페이지의 Developer Interface의 requests.get() 부분을 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment