XML 사이트맵에서 URL 추출하기: 호스트 검증과 중복 제거
사이트맵 URL은 XML 네임스페이스를 지정해 읽고, 자신의 허용 호스트에 속한 주소만 선별해야 합니다.
어떤 상황에서 적용하나요?
아래는 작은 urlset 문자열을 파싱합니다. 사이트맵 인덱스는 하위 사이트맵을 가리키는 별도 형식이므로 같은 경로로 페이지 URL처럼 취급하지 않습니다.
검증 범위: 아래 코드는 외부 서비스에 요청하지 않는 로컬 예제입니다. 실제 서비스 연결은 별도로 검증해야 합니다.
최소 예제로 동작 확인하기
import xml.etree.ElementTree as ET
from urllib.parse import urlparse
xml = """<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://example.com/a</loc></url>
<url><loc>https://other.example/b</loc></url>
<url><loc>https://example.com/a</loc></url></urlset>"""
ns = {"s": "http://www.sitemaps.org/schemas/sitemap/0.9"}
root = ET.fromstring(xml)
urls = sorted({node.text.strip() for node in root.findall("s:url/s:loc", ns)
if node.text and urlparse(node.text.strip()).hostname == "example.com"})
assert urls == ["https://example.com/a"]
print(urls)
결과는 어떻게 확인하나요?
허용된 example.com의 주소 하나만 남습니다. www가 있는 주소와 없는 주소를 같은 사이트로 간주할지는 실제 사이트의 리디렉션과 대표 호스트 설정에 맞춰 결정합니다.
실제 업무에 적용할 때 확인할 점
외부 XML은 응답 크기와 처리 시간을 제한하세요. URL 추출 성공은 크롤링이나 색인 성공이 아닙니다. 신규 URL 비교를 위해 이전 목록을 보관할 때는 삭제된 URL과 일시적인 수집 실패도 구분해야 합니다.
공식 자료와 다음 단계
관련 공식 문서에서 사용하는 버전의 기능과 제한을 확인하세요.
학습 경로: 웹 스크래핑 가이드 · 요청 정책과 헤더
작성: 로그 · 2026-10-17 수정: 확인되지 않은 경험담과 성능 보장 표현을 제거하고 예제·적용 조건·공식 근거를 보완했습니다.
댓글
댓글 쓰기