Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 정규식으로 웹 페이지의 모든 앵커() 태그 추출하기

웹 페이지나 HTML 문자열에서 앵커(anchor) 태그를 추출해야 할 때 파이썬의 re 모듈과 정규식을 활용하면 간단하게 처리할 수 있습니다. 이 글에서는 정규식 패턴을 사용해 문자열 속의 <a> 태그와 그 내용을 추출하는 방법을 단계별로 살펴봅니다.

1. 기본 패턴 이해하기

가장 먼저 알아야 할 것은 정규식 패턴 구성입니다. 앵커 태그는 일반적으로 다음과 같은 형태를 가집니다.

<a href='https://example.com' target='_blank'>링크 텍스트</a>

여기서 여는 태그는 <a로 시작하고, 속성들이 뒤따르며 >로 닫힙니다. 이를 매칭하기 위한 핵심 패턴은 아래와 같습니다.

  • <a\b : 'a'로 시작하는 태그명을 정확히 매칭 (anchor, article 등 다른 태그와 구분)
  • [^>]* : 닫는 꺾쇠(>)가 나오기 전까지의 모든 속성 문자를 포함
  • (.*?) : 태그 사이의 내용(링크 텍스트)을 캡처 (비탐욕 매칭)
  • </a> : 닫는 앵커 태그 매칭

2. 링크 텍스트만 추출하는 예제

다음 코드는 주어진 문자열에서 앵커 태그 내부의 텍스트만 추출합니다.

예제 코드

import re

rex = re.compile(r"<a\b[^>]*>(.*?)</a>")
l = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2"
result = rex.findall(l)
print(result)

출력 결과

['hi']

3. 앵커 태그 전체를 추출하는 예제

태그 자체(속성 포함)를 통째로 가져오고 싶다면 캡처 그룹 없이 패턴을 작성하면 됩니다.

예제 코드

import re

rex = re.compile(r"<a[^>]*>.*?</a>")
l = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2"
result = rex.findall(l)
print(result)

출력 결과

["<a href='irawati.com' target='_blank'>hi</a>"]

4. 참고: 꺾쇠 괄호만 찾는 간단한 패턴

[\<\>] 패턴을 사용하면 문자열 안의 모든 꺾쇠 괄호 문자를 찾을 수 있습니다. 다만 이 방법은 태그 구조를 분석하지 못하므로 실제 앵커 태그 추출에는 위에서 소개한 패턴이 더 적합합니다.

import re

rex = re.compile(r'[\<\>]')
l = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2"
print(rex.findall(l))
['<', '>', '<', '>']

5. 더 견고한 방법: BeautifulSoup 활용

정규식은 간단한 경우에 유용하지만, 줄바꿈이나 중첩된 태그가 많은 실제 HTML 문서에서는 한계가 있습니다. 프로덕션 환경에서는 HTML 파서인 BeautifulSoup을 사용하는 것이 좋습니다.

from bs4 import BeautifulSoup

html = "this is text1 <a href='irawati.com' target='_blank'>hi</a> this is text2"
soup = BeautifulSoup(html, "html.parser")

for a in soup.find_all("a"):
    print(a.get("href"))   # irawati.com
    print(a.get_text())    # hi

마무리

간단한 문자열 처리에는 정규식 패턴 r"<a\b[^>]*>(.*?)</a>"로 충분하며, 복잡한 HTML 문서를 다룰 때는 BeautifulSoup 같은 전용 파서를 사용하는 것이 안전하고 유지보수에도 유리합니다.