📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
Python | 2018. 3. 23. 15:00

[Python] 파이썬 URL 다루는 법 (Python urllib)

파이썬 URL 다루는 법 (Python urllib)

파이썬에서는 기본적으로 URL과 쿼리스트링(파라미터)를 다룰 수 있는 기능을 urllib.parse 를 통해 제공하고 있습니다. urllib.parse 모듈은 python2에서 urlparse라는 모듈이었으나, python3.x 부터 urllib.parse로 변경되었습니다.

URL 문자열을 파싱하기

urlparse() 를 사용하여 URL을 해석할 수 있습니다.

from urllib import parse

url = parse.urlparse('https://www.exeam.org/index.html?examParam1=value1&examParam2=value2#welcome')

print(url)

결과

ParseResult(scheme='https', netloc='www.exeam.org', path='/index.html', params='', query='examParam1=value1&examParam2=value2', fragment='welcome')

ParseResult 속성

urlparse() 를 통해 URL을 튜플의 하위 클래스인 ParseResult 클래스로 변환할 수 있습니다.

ParseResult의 속성은 다음과 같습니다.

URL 예시) scheme://username:passwd@netloc:port/path;params?query#fragment

속성 설명
scheme scheme 스키마(http, http, ftp, mailto 등)
username username 사용자 이름
passwd passwd 비밀번호
hostname netloc 호스트명
port port port번호
netloc username:passwd@netloc:port 네트워크 위치
path /path 경로
params ;params URL 파라미터
query ?query 쿼리스트링
fragment #fragment fragement 식별자

속성 얻는 방법

from urllib import parse

url = parse.urlparse('https://www.exeam.org/index.html?examParam1=value1&examParam2=value2#welcome')

>>> url.geturl() # https://www.exeam.org/index.html?examParam1=value1&examParam2=value2#welcome

>>> url.scheme #속성값 얻기 > https
>>> url[0]        #인덱스로 접근 가능 > https

쿼리 스트링(Query String) 다루기

Http URL Parameter를 다루려면 parse_qs() 메서드를 사용하면 됩니다.

parse_qs() 는 지정된 쿼리스트링을 해석하여 dict() 로 반환합니다.

parse_qsl() 을 사용하는 경우에는 파라미터와 값을 쌍으로 갖는 튜플 리스트로 반환받을 수 있습니다.

parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')

qs - 쿼리 스트링 문자열(str)을 지정합니다.

keep_blank_values - False로 지정하면 빈 값이 있는 쿼리스트링이 포함된 경우 제외합니다. True인 경우 빈 문자로 인식.

strict_parsing - False로 지정하면 parse 중 오류가 발생했을 때 무시합니다.

encoding - Unicode로 디코딩할 때의 chareset을 지정합니다.

error - Unicode로 디코딩할 때의 동작을 지정합니다.

parse_qs() 사용 방법

parse_qs()에는 쿼리스트링 문자열을 지정해 주어야 합니다. url 객체로부터 추출하는 방법은 다음과 같습니다.

리턴타입은 딕셔너리 타입입니다.

from urllib import parse

url = parse.urlparse('http://www.exeam.org?examParam1=value1&examParam2=value2')

>>> parse.parse_qs(url.query) #딕셔너리 리턴 {'examParam1': ['value1'], 'examParam2': ['value2']}

문자열 리터럴을 그대로 전달하고 싶은 경우 쿼리스트링 부분의 문자열만 전달합니다.

from urllib import parse

>>>parse.parse_qs('examParam1=value1&examParam2=value2') #{'examParam1': ['value1'], 'examParam2': ['value2']}

하나의 파라미터 name에 값이 여러개인 경우에는 다음과 같이 리턴합니다.

from urllib import parse

>>> parse.parse_qs('examParam1=value1&examParam1=value2') #{'examParam1': ['value1', 'value2']}

parse_qsl() 사용 방법

만약 쿼리스트링 변환 결과를 파라미터와-값 쌍으로 이루어진 튜플 리스트로 얻고 싶은 경우 parse_qsl() 을 사용합니다.

하나의 파라미터에 값이 여러개인 경우에도 여러개의 튜플이 됩니다.

from urllib import parse

>>> parse.parse_qsl('examParam1=value1&examParam1=value2') #[('examParam1', 'value1'), ('examParam1', 'value2')]

이어지는 글

[Python] 파이썬 URL Encoding 하는 방법. 한글 인코딩 하기

더욱 자세한 내용은 공식문서 참고

https://docs.python.org/3.4/library/urllib.parse.html

도로락

도로락

Writer

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그