urljoin 뒤 도메인이 바뀌는 이유: // 주소와 외부 링크를 목록에서 나누기

주소 카드에서 서로 다른 도메인으로 갈라지는 선을 표현한 삽화, urljoin 도메인 확인 제목

urljoin에 블로그 기준 주소를 넣었다고 결과가 반드시 그 블로그 안에 머무는 것은 아닙니다. 두 번째 주소가 //다른도메인/경로 형태이거나 완전한 절대 주소라면 결과의 도메인이 달라질 수 있습니다.

따라서 링크 추출에서 주소 결합과 “내 블로그 링크인가” 판정은 별도 단계입니다. 이 글의 예시는 네트워크에 접속하지 않고 문자열 결과만 확인합니다. 예시 도메인을 실제 자료 주소로 사용하지 마세요.

1. //로 시작하는 주소의 결합 결과

from urllib.parse import urljoin
base = 'https://example.org/blog/'
print(urljoin(base, '//other.example/post'))
# https://other.example/post

Python 공식 문서는 두 번째 인수가 절대 주소이면 그 주소의 호스트나 스킴이 결과에 반영된다고 설명합니다. 위 결과는 예시 문자열의 호스트가 바뀐 것입니다. 정상적인 외부 링크일 수도 있으므로 무조건 오류로 지우기보다 목적에 맞게 분류하세요.

2. 원본과 결합 결과를 함께 남기기

열예시·목적
원본 href추출한 문자열을 그대로 보존
기준 URL어느 페이지에서 읽었는지 기록
결합 URLurljoin 결과를 별도 열에 저장
결과 호스트허용하려는 도메인과 비교
분류내부·외부·확인 필요를 구분

원본을 덮어쓰면 나중에 왜 다른 호스트가 됐는지 설명하기 어렵습니다. 결과를 저장하기 전에 허용할 스킴과 호스트를 정하고, 잘못된 값이나 빈 값도 별도로 다루세요. 주소를 파싱했다고 유효성과 접근 안전성 검사가 자동으로 끝나는 것은 아닙니다.

3. 목록 확인과 실제 접속을 분리하기

먼저 문자열만으로 결합 결과를 만들고, 허용한 범위에 맞는지 확인한 다음 접속 여부를 정하세요. 출처가 불명확한 입력을 결합한 결과에 자동 접속하는 방식은 피하는 편이 좋습니다. Python 문서도 외부에서 제어할 수 있는 두 번째 인수를 무조건 신뢰하는 사용을 경고합니다.

예를 들어 내부 글 목록이 목적이라면 외부 호스트 결과를 확인 필요 열로 보내고, 관련 외부 자료 목록이 목적이라면 분리된 외부 링크로 보존할 수 있습니다. 분류 목적이 다르니 같은 결과라도 처리 방식이 달라집니다.

Python urljoin의 절대 주소 주의사항 확인

4. 자주 묻는 질문

기준 URL을 https로 넣으면 모두 https가 되나요?

완전한 절대 주소가 들어오면 그 스킴이 반영될 수 있습니다. 결과의 스킴과 호스트를 따로 확인하세요.

다른 도메인은 모두 삭제해야 하나요?

목록의 목적에 따라 다릅니다. 필요한 외부 자료일 수 있으니 원본을 보존하고 분류한 뒤 결정하세요.

자료 확인: 2026년 10월 11일. Python 공식 문서: urllib.parse.urljoin

대표 썸네일은 이해를 돕기 위해 AI로 제작한 삽화입니다.

이 블로그의 인기 게시물

디노 블로그 링크 추출기

디노 글자수 계산기

URL에 앰퍼샌드 표기가 남을 때: HTML 원문과 추출한 href를 구분하세요