본문 바로가기

Python

Python urllib.parse

Python urllib.parse

이 모듈은 하는 일이 굉장히 단순하고 명확하므로 코드를 적는 것으로 정리를 끝낸다.

Cheat Sheet

url parsing


import urllib.parse as up

url = 'http://api.phople.us/me?user=길동&pass=1234#intro'
print(up.urlparse(url))  # ParseResult(scheme='http', netloc='api.phople.us', path='/me', params='', query='user=길동&pass=1234', fragment='intro')
print(up.urljoin('http://base.com', 'child#section'))  # http://base.com/child#section
print(up.urldefrag(url))  # DefragResult(url='http://api.phople.us/me?user=길동&pass=1234', fragment='intro')

url percent escape


ascii 문자가 아닌 녀석들에 escape처리한 결과물을 반환한다.

import urllib.parse as up

# quote-safe
print(up.quote('abcde'))
print(up.quote('12345'))
print(up.quote('_-'))  # _- (whitelist)

# quote target
print(up.quote('  '))  # %20%20
print(up.quote('!@#$%^&*()|\\'))  # %21%40%23%24%25%5E%26%2A%28%29%7C%5C
print(up.quote('가나다라'))  # %EA%B0%80%EB%82%98%EB%8B%A4%EB%9D%BC

# other examples
print(up.quote('a b'))  # a%20b
print(up.quote_plus('a b'))  # a+b

print(up.unquote(up.quote('가 나')))  # 가 나
print(up.unquote_plus(up.quote_plus('가 나')))  # 가 나

print(up.urlencode({'user': "길동123", 'pass': '비밀'}))  # pass=%EB%B9%84%EB%B0%80&user=%EA%B8%B8%EB%8F%99123

quote_plus도 종종 사용되는 url escape 방식이다. 단 이 방식으로 escape처리한 경우, unquote_plus를 사용해서 escape를 해제해야 한다. 그렇지 않으면 ‘가+나’가 반환될 것이다.

urlencode()를 사용하면 한번에 쉽게 여러 문자열 url escape를 할 수 있다. 보통 이런 경우는 data를 작성한 경우겠다. 귀찮게 파라미터 하나하나 quote() 불러서 하지 말자.

'Python' 카테고리의 다른 글

DRF ModelViewSet method  (0) 2016.02.25
Python update all package  (0) 2016.02.13
Python BeautifulSoup4  (0) 2016.02.12
Python global variable  (0) 2016.02.10
Python argparse  (0) 2016.02.10