링크(href) 추출기

HTML 소스를 붙여넣으면 모든 링크를 추출합니다 — 중복 없이 정리된 href 주소를 한 줄씩 나열하며, 복사하거나 다운로드할 수 있습니다.

조회수 1,057회

작동 방식

HTML 소스 — 소스 보기 결과물, 저장된 .html 파일, 또는 복사한 어떠한 코드 조각이든 — 를 붙여넣으면 이 도구는 그 텍스트를 손으로 작성한 정규식이 아니라 브라우저 자체의 HTML 파서에 넘깁니다. 이 차이는 겉보기보다 훨씬 중요합니다. 실제 HTML은 단순한 정규식이 감당하기 어려운 방식으로 지저분합니다: 속성은 큰따옴표, 작은따옴표, 또는 따옴표 없이 쓰일 수 있고(href=about.html도 기술적으로 유효한 HTML입니다), 태그는 자체 닫힘일 수도 아닐 수도 있으며, 여러 단계로 중첩되거나 여러 줄에 걸쳐 있거나 그 자체로 꺾쇠괄호를 담은 주석과 <script> 블록 안에 들어 있을 수도 있습니다. 브라우저급 파서는 이런 예외 상황 하나하나를 20년에 걸쳐 흡수해 왔습니다 — 마크업이 아무리 잘못 작성되어 있어도 주어진 페이지를 렌더링해야 하기 때문입니다. 태그를 위한 패턴 매칭을 처음부터 다시 만드는 대신 이 동일한 엔진 위에 추출기를 구축하는 것이, 스크레이핑한 경쟁사 페이지나 오래된 캠페인 내보내기처럼 직접 작성하지 않은 마크업에서도 안정적으로 동작하게 만드는 이유입니다.

파서가 붙여넣은 마크업으로부터 구조적인 트리를 구성하고 나면, 모든 <a> 요소의 href는 문자열에서 뽑아낸 원시 텍스트가 아니라 해당 요소의 속성으로 직접 읽힙니다 — 이는 따옴표와 관련된 특이 사항이나 패턴 매칭을 속일 수 있는 주석 안의 엉뚱한 꺾쇠괄호를 애초에 우회하게 해줍니다. 이렇게 얻은 URL 목록은 중복이 제거되고 한 줄에 하나씩 기록되어, 클립보드로 복사하거나 일반 텍스트 파일로 다운로드할 준비가 됩니다.

구체적인 예시: 어떤 페이지의 HTML에 <a href='/pricing'>, <a href="https://example.com/blog">, 그리고 따옴표가 전혀 없는 <a href=mailto:[email protected]>가 있다고 가정해 봅시다 — 세 줄에 세 가지 서로 다른 따옴표 스타일입니다. href="..."와 일치하도록 작성된 정규식은 작은따옴표나 따옴표 없는 경우를 조용히 놓칠 것입니다. 파서는 이 셋을 동일하게 읽는데, 브라우저 입장에서 이들은 따옴표로 감쌌든 아니든 그저 속성 값일 뿐이기 때문입니다.

알아두어야 할 사항

  • /pricing이나 ../blog/post와 같은 상대 URL은 소스에 쓰인 그대로 추출되며, 완전한 https://... 주소로 변환되지 않습니다. 상대 경로를 절대 URL로 바꾸려면 페이지의 기본 URL을 알아야 합니다 — 보통 HTML을 처음 가져온 주소이거나 명시적인 <base> 태그입니다 — 붙여넣은 코드 조각은 이 정보를 스스로 지니고 있지 않습니다.
  • 이 도구는 스스로 어떠한 URL도 가져오지 않으며, 오직 제공된 HTML만 읽습니다. 이는 의도적인 경계입니다: 이런 방식으로 페이지의 외부 링크를 점검하는 데는 이 사이트 쪽의 서버 요청이 전혀 필요하지 않으며, 소스를 보거나 저장할 때 이미 사용한 브라우저만 있으면 충분합니다.
  • mailto:tel: 링크는 다른 href와 똑같이 통과됩니다. 파서가 스킴에 따라 구분하지 않기 때문입니다 — href 속성에 들어 있는 것은 무엇이든 나열할 가치가 있는 링크로 취급됩니다.

자주 묻는 질문

페이지를 직접 가져오나요, 아니면 HTML을 제가 준비해야 하나요?

HTML은 직접 준비하셔야 합니다 — 소스 보기 결과, 저장된 .html 파일의 내용, 또는 아무 HTML 조각이나 붙여넣으시면 됩니다. 이 도구는 스스로 URL을 가져오지 않습니다(이는 이 사이트가 하지 않는 서버 요청을 필요로 하기 때문입니다).

상대 경로 링크도 포함되며, 완전한 URL로 변환되나요?

상대 경로 링크(예: /about 또는 ../page.html)는 소스에 쓰인 그대로 추출되며, 절대 URL로는 결코 변환되지 않습니다. 이를 변환하려면 페이지의 기본 URL — 보통 HTML을 가져온 주소 — 을 알아야 하는데, 붙여넣은 코드 조각은 이 정보를 스스로 지니고 있지 않습니다.

mailto:나 tel: 링크도 포함되나요?

네 — 스킴에 상관없이 모든 href 값이 추출됩니다. 파서가 링크의 종류로 필터링하지 않고 속성 자체를 읽기 때문입니다.

왜 정규식 대신 브라우저의 DOM 엔진으로 분석하나요 — 정말 차이가 있나요?

지저분한 실제 HTML에서 가장 큰 차이가 납니다. 한 가지 따옴표 스타일(예: 큰따옴표를 쓰는 href="...")에 맞춰진 정규식은 작은따옴표나 따옴표 없는 속성, 자체 닫힘 변형, 깊이 중첩되거나 손상된 마크업 안에 묻힌 href를 조용히 놓칩니다. DOM 파서는 이 모든 것을 브라우저가 페이지를 렌더링할 때와 동일한 방식으로 처리하는데, 실제로 같은 기반 엔진이기 때문입니다.

축소되었거나 심하게 손상된 HTML에서도 링크를 잡아내나요?

거의 모든 경우에 그렇습니다. 브라우저는 완벽하게 정형화되지 않은 페이지 — 닫는 태그 누락, 일관되지 않은 중첩, 한 줄로 축소된 마크업 — 도 렌더링하도록 만들어져 있으며, 여기에도 동일하게 관대한 분석 방식이 적용됩니다. 이것이 바로 깨끗하고 잘 정형화된 입력을 기대하는 엄격한 정규식에 비해 갖는 확실한 장점입니다.

댓글

아직 댓글이 없습니다 — 첫 댓글을 남겨보세요!

비슷한 도구