파이썬 URL 인코딩해보기

728x90
from urllib.parse import urlsplit, quote

필요한 라이브러리를 받아옵니다.

https://cokes.tistory.com/manage/newpost/코크는 개발자

 

이렇게 한글이나 공백이 있는 경우 인코딩을 해주어야합니다.

 

def quote(string, safe='/', encoding=None, errors=None):
    if isinstance(string, str):
        if not string:
            return string
        if encoding is None:
            encoding = 'utf-8'
        if errors is None:
            errors = 'strict'
        string = string.encode(encoding, errors)
    else:
        if encoding is not None:
            raise TypeError("quote() doesn't support 'encoding' for bytes")
        if errors is not None:
            raise TypeError("quote() doesn't support 'errors' for bytes")
    return quote_from_bytes(string, safe)

quote 함수를 보자면 utf-8로 인코딩을 해서 반환해줍니다.

하지만 전체 url를 인코딩 해버리면 https:// 에 ' : ' 를 인코딩해버려서 url로 인식을 하지 못하게 됩니다.

 

url = 'https://cokes.tistory.com/manage/newpost/코크는 개발자'
# 이 url를 urlsplit()으로 나누어보면
urlsplit(url)
#(scheme="https", netloc="cokes.tistory.com", path="/mange/newpost/코크는 개발자")

이런 결과가 나옵니다.

 

그래서 우리는 path 부분만 quote 함수를 사용해서 인코딩 할 것 입니다.

url_split = urlsplit(url)
url = url_split.scheme + "://" + url_split.netloc + quote(url_split.path)

이렇게 path 부분만 인코딩해서 새로운 url을 뽑아내면 됩니다.

query 파라미터만 뽑아내는 방법도 있습니다.

반응형