파이썬 urljoin 상대 링크 변환: 슬래시, 상위 경로, 쿼리를 구분하기
수집한 href는 기준 문서 URL과 urljoin으로 결합하되, 경로 앞뒤 슬래시와 결합 후 호스트를 별도로 확인하세요. 확인일: 2026-10-25. Python 3.14 표준 라이브러리 예제이며, Windows Python 3.14.4에서 합성 입력으로 실행하고 assert 검사를 통과했습니다. 문자열 더하기로 링크를 만들면 왜 틀리나요? HTML에서 찾은 href는 detail.html, ../summary.html, /download.csv처럼 서로 다른 기준을 가질 수 있습니다. 사이트 주소와 문자열로 붙이면 상위 경로나 쿼리 전용 링크를 잘못 해석할 수 있습니다. 이 글은 네트워크 수집 전에 링크를 계산하는 단계만 다루며 실제 사이트에 요청하지 않습니다. example.invalid와 other.invalid는 합성 주소입니다. 입력 기준 URL을 문서 주소로 고정합니다 기준은 https://example.invalid/reports/2026/index.html입니다. detail.html은 같은 디렉터리, ../summary.html은 한 단계 위, /download.csv는 사이트 루트에서 시작합니다. ?page=2는 현재 문서의 쿼리를 바꾸고 #table은 문서 내 위치를 붙입니다. 아래 사례별 예상 URL을 assert로 비교하므로 출력 문자열을 직접 대조할 수 있습니다. 직접 실행하는 예제 from urllib.parse import urljoin base = "https://example.invalid/reports/2026/index.html" cases = { "detail.html": "https://example.invalid/reports/2026/detail.html", "../summary.html": "https://example.invalid/reports/summary.html", "/download...