Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python urllib.parse 모듈 완벽 가이드: URL 구문 분석부터 인코딩까지

urllib.parse 모듈이란?

urllib.parse 모듈은 URL(Uniform Resource Locator) 문자열을 여러 구성 요소로 분해하거나, 반대로 분해된 구성 요소들을 다시 하나의 URL 문자열로 결합하는 표준 인터페이스를 제공합니다. 또한 '기본 URL(base URL)'이 주어졌을 때 '상대 URL(relative URL)'을 절대 URL(absolute URL)로 변환하는 기능도 함께 제공합니다.

이 모듈은 다음과 같은 다양한 URL 스킴(scheme)을 지원합니다.

  • file
  • ftp
  • gopher
  • hdl
  • http
  • https
  • imap
  • mailto
  • mms
  • news
  • nntp
  • prospero
  • rsync
  • rtsp
  • rtspu
  • sftp
  • shttp
  • sip
  • sips
  • snews
  • svn
  • svn+ssh
  • telnet
  • wais
  • ws
  • wss

urlparse() — URL을 6개 구성 요소로 분해

urlparse() 함수는 URL을 여섯 개의 구성 요소로 나누어 6-튜플(6-tuple) 형태로 반환합니다. 반환되는 각 튜플 항목은 문자열이며, 일반적인 URL 구조에 대응됩니다. 단, 각 구성 요소는 더 작은 단위로 세분화되지 않으며(예: 네트워크 위치는 하나의 문자열), % 이스케이프도 확장되지 않습니다.

반환값은 튜플을 상속한 서브클래스의 인스턴스로, 다음과 같은 속성을 가집니다.

속성인덱스값이 없을 경우
scheme0URL 스킴 식별자scheme 매개변수 값
netloc1네트워크 위치 부분빈 문자열
path2계층적 경로빈 문자열
params3마지막 경로 요소의 매개변수빈 문자열
query4쿼리 구성 요소빈 문자열
fragment5프래그먼트 식별자빈 문자열
username-사용자 이름None
password-비밀번호None
hostname-호스트 이름 (소문자)None
port-포트 번호 (정수)None

urlparse() 사용 예제

>>> from urllib.parse import urlparse
>>> url = 'https://mail.google.com/mail/u/0/?tab=rm#inbox'
>>> t = urlparse(url)
ParseResult(scheme='https', netloc='mail.google.com', path='/mail/u/0/', params='', query='tab=rm', fragment='inbox')

urlunparse() — 구성 요소를 다시 URL로 결합

urlunparse() 함수는 urlparse()가 반환한 튜플로부터 URL을 다시 생성합니다. parts 인자는 여섯 개의 항목을 가진 어떤 이터러블(iterable)이든 사용할 수 있습니다.

>>> from urllib.parse import urlunparse
>>> urlunparse(t)
'https://mail.google.com/mail/u/0/?tab=rm#inbox'

urlsplit() — params를 제외한 5개 요소로 분해

urlsplit() 함수는 urlparse()와 유사하지만, URL에서 params를 별도로 분리하지 않는다는 차이점이 있습니다. 이 함수는 다섯 개의 요소를 가진 5-튜플을 반환합니다: (스킴, 네트워크 위치, 경로, 쿼리, 프래그먼트 식별자).

>>> from urllib.parse import urlsplit
>>> urlsplit(url)
SplitResult(scheme='https', netloc='mail.google.com', path='/mail/u/0/', query='tab=rm', fragment='inbox')

urlunsplit() — 분해된 요소를 하나의 URL로 통합

urlunsplit() 함수는 urlsplit()이 반환한 튜플의 요소들을 결합하여 하나의 완전한 URL 문자열로 만들어 줍니다.

URL 인용(Quoting) 함수

URL 인용 관련 함수들은 프로그램 데이터를 안전하게 URL 구성 요소로 사용할 수 있도록 특수 문자를 인용 처리하고, 비 ASCII(non-ASCII) 텍스트를 적절히 인코딩하는 데 중점을 둡니다.

quote()

quote() 함수는 문자열 내의 특수 문자를 %xx 이스케이프 형식으로 대체합니다. 단, 영문자, 숫자, 그리고 '_.-~' 문자는 절대 인용되지 않습니다.

>>> from urllib.parse import quote
>>> q = quote(url)
'https%3A//mail.google.com/mail/u/0/%3Ftab%3Drm%23inbox'

quote_plus()

quote_plus()quote()와 동일하게 동작하지만, 공백을 덧셈 기호(+)로 대체한다는 점이 다릅니다. 이는 URL에 포함될 쿼리 문자열을 만들 때 HTML 폼(form) 값을 인용하는 데 필요한 방식입니다.

unquote()

unquote() 함수는 %xx 이스케이프를 해당하는 단일 문자로 되돌려 변환합니다. 즉, 인코딩된 URL을 원래 상태로 복원하는 디코딩 역할을 수행합니다.

>>> from urllib.parse import unquote
>>> unquote(q)
'https://mail.google.com/mail/u/0/?tab=rm#inbox'

urlencode() — 딕셔너리를 쿼리 문자열로 변환

urlencode() 함수는 매핑 객체(mapping object) 또는 두 요소로 이루어진 튜플의 시퀀스를 퍼센트 인코딩된 ASCII 텍스트 문자열로 변환합니다. 결과 문자열은 '&' 문자로 구분된 일련의 key=value 쌍으로 구성되며, 주로 GET 요청의 쿼리 문자열을 생성할 때 활용됩니다.

>>> from urllib.parse import urlencode
>>> qry = {"name": "Rajeev", "salary": 20000}
>>> urlencode(qry)
'name=Rajeev&salary=20000'