Python의 urlparse: URL 파싱 알아보기

Kangjik Kim·2025년 7월 6일
0

1. urlparse 소개

urlparse는 Python의 urllib.parse 모듈에서 제공하는 URL 파싱 도구입니다.
이 함수는 URL 문자열을 의미 있는 컴포넌트로 분해하여 분석할 수 있게 해줍니다.

2. urlparse의 기본 사용법

from urllib.parse import urlparse

# 기본 사용 예시
url = "<https://user:pass@example.com:8080/path/to/page?query=value#fragment>"
parsed = urlparse(url)

3. ParseResult 객체 구조

urlparseParseResult 객체를 반환합니다. 이 객체는 네임드 튜플(named tuple)의 형태로, 다음과 같은 6개의 컴포넌트를 가집니다:

ParseResult(
    scheme='https',      # URL 스키마 (프로토콜)
    netloc='example.com',# 네트워크 위치
    path='/path/name',   # 경로
    params='',           # 매개변수
    query='',           # 쿼리 문자열
    fragment=''         # 프래그먼트
)

4. 다양한 URL 예시와 파싱 결과

4.1 HTTPS URL

url = "<https://www.example.com/path/to/resource?name=value#section>"
parsed = urlparse(url)

print(f"scheme  : {parsed.scheme}")   # https
print(f"netloc  : {parsed.netloc}")   # www.example.com
print(f"path    : {parsed.path}")     # /path/to/resource
print(f"params  : {parsed.params}")   #
print(f"query   : {parsed.query}")    # name=value
print(f"fragment: {parsed.fragment}") # section

4.2 S3 URL

url = "s3://my-bucket/uploads/files/"
parsed = urlparse(url)

print(f"scheme  : {parsed.scheme}")   # s3
print(f"netloc  : {parsed.netloc}")   # my-bucket
print(f"path    : {parsed.path}")     # /uploads/files/

4.3 FTP URL (인증 정보 포함)

url = "<ftp://user:password@ftp.example.com/files/>"
parsed = urlparse(url)

print(f"scheme  : {parsed.scheme}")   # ftp
print(f"netloc  : {parsed.netloc}")   # <user:password@ftp.example.com>
print(f"path    : {parsed.path}")     # /files/

5. 유용한 메서드와 속성

5.1 path 처리

# 경로에서 앞뒤 슬래시 제거
clean_path = parsed.path.strip('/')
print(clean_path)  # 'uploads/files'

# 경로 구성요소 분리
path_components = parsed.path.split('/')
print(path_components)  # ['', 'uploads', 'files', '']

5.2 netloc 구성요소 접근

url = "<https://user:pass@example.com:8080>"
parsed = urlparse(url)

print(f"username: {parsed.username}")  # user
print(f"password: {parsed.password}")  # pass
print(f"hostname: {parsed.hostname}")  # example.com
print(f"port    : {parsed.port}")     # 8080

6. 실제 활용 예시: S3 파일 업로드 경로 생성

from urllib.parse import urlparse
from datetime import datetime
import uuid

def create_s3_path(s3_base_url, filename):
    """S3 업로드 경로 생성 함수"""
    parsed = urlparse(s3_base_url)

    # 버킷과 기본 경로 추출
    bucket_name = parsed.netloc
    base_path = parsed.path.strip('/')

    # UUID를 사용한 고유 파일명 생성
    file_extension = filename.split('.')[-1]
    unique_filename = f"{uuid.uuid4()}.{file_extension}"

    # 날짜 기반 경로 생성
    date_path = datetime.now().strftime('%Y/%m/%d')

    # 최종 S3 키 생성
    s3_key = f"{base_path}/{date_path}/{unique_filename}"

    return {
        'bucket': bucket_name,
        's3_key': s3_key,
        'full_path': f"s3://{bucket_name}/{s3_key}"
    }

# 사용 예시
result = create_s3_path("s3://my-bucket/uploads", "document.pdf")
print(result)

출력 예시:

{
    'bucket': 'my-bucket',
    's3_key': 'uploads/2024/03/15/550e8400-e29b-41d4-a716-446655440000.pdf',
    'full_path': 's3://my-bucket/uploads/2024/03/15/550e8400-e29b-41d4-a716-446655440000.pdf'
}

7. 주의사항

  1. urlparse는 URL이 완벽하게 형식에 맞지 않아도 최선을 다해 파싱을 시도합니다.
  2. 스키마가 없는 URL은 기본적으로 경로로 해석됩니다.
  3. 네트워크 위치(netloc)와 경로(path)를 구분하는 '//'가 없으면 모든 것이 경로로 해석됩니다.

8. 결론

urlparse는 URL 처리에 있어 매우 유용한 도구입니다.
특히 웹 애플리케이션 개발, 파일 시스템 경로 처리, API 통합 등에서 URL을 분석하고 조작해야 할 때 필수적인 도구입니다.
올바른 사용을 위해서는 URL의 구조를 이해하고, 각 컴포넌트의 의미와 역할을 파악하는 것이 중요합니다.

0개의 댓글