[Python] HTML 파일에서 태그(Tag) 추출하기 (tuple or list 형 출력)

extract-tag-in-html-file

해당 포스트에서는 파이썬(Python)을 이용하여 HTML 태그(tag) 정보들을 추출하는 방법에 대해 설명합니다.

1. INTRO

웹 크롤링(Web Crawling)을 통해 수집한 HTML 파일에서 태그(tag)들을 추출하는 방법에 대해 설명합니다. 파이썬(Python)이 오픈 소스 언어이다 보니 다른 분들이 만들어 놓은 tag 추출 라이브러리들이 있을 수 있으나, 이번 포스트에서는 일반적으로 많이 사용하는 정규표현식을 이용하는 방법에 대해 설명합니다.

2. 샘플 데이터 생성

이번 설명에서 사용할 HTML 형식을 갖춘 텍스트 데이터를 생성합니다.

testtext1 = """
My favorite website in the world is probably 
<a href="www.udacity.com">Udacity</a>. If you want 
that link to open in a <b>new tab</b> by default, you should
write <a href="www.udacity.com"target="_blank">Udacity</a>
instead!
"""

extract-tag-in-html-file

3. 태그(tag) 추출 함수 생성

정규표현식을 이용하여 태그(tag)를 추출하기 위한 함수를 생성합니다. 정규표현식 사용을 위해 사전에 re 모듈을 로드해야 합니다.

1) tuple 타입으로 리턴받기

import re

def findtags(text):
    parms = '(\w+\s*=\s*"[^"]*"\s*)*'
    tags = '(<\s*\w+\s*' + parms + '\s*/?>)'
    print(re.findall(tags, text))
    return re.findall(tags, text)

findtags(testtext1)

extract-tag-in-html-file

2) list 타입으로 리턴받기

list 타입으로 리턴받기 위해서는 parms=에 조건식을 추가해 주면 됩니다.

  • tuple : '(\w+\s=\s"[^"]*"\s)'
  • list : '(?:\w+\s=\s"[^"]*"\s)'
import re

def findtags(text):
    # make this non capturing group
    parms = '(?:\w+\s*=\s*"[^"]*"\s*)*'
    tags = '(<\s*\w+\s*' + parms + '\s*/?>)'
    print(re.findall(tags, text))
    return re.findall(tags, text)

findtags(testtext1)

extract-tag-in-html-file

4. 마무리

이번 포스트에서는 파이썬(Python)을 이용하여 HTML 파일 내 태그(tag) 값을 추출하는 방법에 대해 설명하였습니다. 위 함수를 별도로 저장해 두시고 필요할 때 사용하시면 도움이 되실 거라 생각합니다.

5. 관련 링크

[1] python re.findall returns a list of tuples (strings are expected)

banner-request-analysis