[태그:] <span>bs4</span>

안녕하세요. 언휴예요.

파이썬으로 프로그래밍 하다 보면 이미 만들어서 재사용 가능한 패키지를 이용하는 것은 매우 흔한 일이예요. 여기에서는 웹 페이지나 XML 코드를 분석할 때 자주 사용하는 BeautifulSoup4 패키지를 설치하는 것을 해 볼 거예요.

Visual Studio의 솔루션 창에서 파이썬 프로젝트 노드를 선택하면 하위 노드에 Python 환경 노드가 보이고 그 뒤에 파이썬 노드(그림 1에서 빨간 보더로 마킹한 곳)가 있습니다. 해당 노드에서 컨텍스트 메뉴(오른쪽 마우스를 클릭할 때 뜨는 메뉴)에 Python 패키지 설치를 선택하여 쉽게 패키지를 설치할 수 있어요.

[그림 1] Python 패키지 설치 선택
[그림 1] Python 패키지 설치 선택

Python 패키지 설치를 선택하면 Python 환경 창이 뜹니다. 이 때 설치할 패키지 이름을 텍스트 입력 창에 입력하면 설치할 수 있는 항목들을 보여줍니다. 여기에서는 beautifulsoup4 설치를 선택할게요.

[그림 2] 설치할 패키지 입력한 후 선택하여 설치하기
[그림 2] 설치할 패키지 입력한 후 선택하여 설치하기

설치가 끝나면 [그림 3]처럼 설치한 패키지 목록에 beautifulsoup4가 보이는 것을 확인할 수 있어요.

[그림 3] 설치 항목
[그림 3] 설치 항목

이제 설치한 beautifulsoup4를 이용하여 html 소스 코드를 분석하는 작업을 해 볼게요. 여기에서는 Python 대화형 창을 이용하여 하나 하나 진행합시다.

먼저 Visual Studio에서 [보기]==>[다른 창]==>[Python 대화형 창]을 선택하세요.

[그림 4] Python 대화형 창
[그림 4] Python 대화형 창
  • BeautifulSoup 사용 실습 – Python 대화형 창에서

대화형 창의 프롬프트에 bs4에서 BeautifulSoup을 import하겠다고 명시하세요.

Python 3.6 (64-bit) 대화형 창 [PTVS 3.0.17310.2-15.0]
명령 목록을 표시하려면 $help를 입력하세요.
>>> from bs4 import BeautifulSoup

이 때 아무런 오류 메시지가 뜨지 않고 다음 라인에 프롬프트(>>>) 표시가 생기면 beautifulsoup 패키지를 정상적으로 설치한 거예요.

beautifulsoup 패키지를 이용하여 html 소스를 분석하는 간단한 예를 실험할 것이므로 다음처럼 html 태그를 입력하세요.

>>> source = '<form role="search" method="get" class="search-form" action="https://ehpub.co.kr/"><label class="screen-reader-text">Search for:</label><input type="search" class="search-field" placeholder="Search..." value="" name="s" title="Search for:"/><input type="submit" class="search-submit" value="Go"/></form>'
  • html 소스 코드를 파싱할 수 있는 개체 구하기

source와 ‘html.parser’를 입력 인자로 BeautifulSoup을 호출하면 쉽게 source의 내용을 html 파싱할 수 있는 개체를 반환합니다. 반환한 값을 확인해 보면 source의 내용을 값으로 갖고 있는 것을 확인할 수 있어요.

>>> src_soup = BeautifulSoup(source,'html.parser')
>>> src_soup
<form action="https://ehpub.co.kr/" class="search-form" method="get" role="search"><label class="screen-reader-text">Search for:</label><input class="search-field" name="s" placeholder="Search..." title="Search for:" type="search" value=""/><input class="search-submit" type="submit" value="Go"/></form>
>>>
  • html 태그에 접근하기

src_soup은 내용에 있는 html 태그 이름을 이용하여 원하는 태그 내용에 접근할 수 있습니다. src_soup의 내용에 있는 form 태그와 label 태그를 접근하여 해당 값을 확인합시다. src_soup의 form 태그에 접근하고자 한다면 src_soup.form 처럼 변수와 태그 멤버 사이에 점(.)을 사용하여 나타냅니다.

>>> tag_form = src_soup.form
>>> tag_form
<form action="https://ehpub.co.kr/" class="search-form" method="get" role="search"><label class="screen-reader-text">Search for:</label><input class="search-field" name="s" placeholder="Search..." title="Search for:" type="search" value=""/><input class="search-submit" type="submit" value="Go"/></form>
>>> tag_label = src_soup.label
>>> tag_label
<label class="screen-reader-text">Search for:</label>
>>>
  • 속성(Attribute)에 접근하기

특정 태그의 속성(Attribute)에 접근할 때는 인덱스를 이용합니다. form 태그를 파싱하기 위한 변수 tag_form에 class 속성을 접근해 보아요. 이 때는 tag_form[‘class’]처럼 변수 뒤에 대괄호가 오며 대괄호 안에 따옴표 안에 속성명을 명시합니다.

>>> attr_class = tag_form['class']
>>> attr_class
['search-form']

같은 방법으로 label의 class 속성을 확인해 보세요.

>>> attr_class2 = tag_label['class']
>>> attr_class2
['screen-reader-text']

이상으로 Visual Studio에 패키지(beautifulsoup)를 설치하는 방법을 확인하고 BeautifulSoup을 이용하여 html 코드를 분석하는 실습을 해 보았어요.

다음은 앞에서 실습한 전체 내용입니다.

Python 상태를 다시 설정하는 중입니다.
대화형 Python 프로세스가 종료되었습니다.
>>> from bs4 import BeautifulSoup
>>> source = '<form role="search" method="get" class="search-form" action="https://ehpub.co.kr/"><label class="screen-reader-text">Search for:</label><input type="search" class="search-field" placeholder="Search..." value="" name="s" title="Search for:"/><input type="submit" class="search-submit" value="Go"/></form>'
>>> src_soup = BeautifulSoup(source,'html.parser')
>>> src_soup
<form action="https://ehpub.co.kr/" class="search-form" method="get" role="search"><label class="screen-reader-text">Search for:</label><input class="search-field" name="s" placeholder="Search..." title="Search for:" type="search" value=""/><input class="search-submit" type="submit" value="Go"/></form>
>>> tag_form = src_soup.form
>>> tag_form
<form action="https://ehpub.co.kr/" class="search-form" method="get" role="search"><label class="screen-reader-text">Search for:</label><input class="search-field" name="s" placeholder="Search..." title="Search for:" type="search" value=""/><input class="search-submit" type="submit" value="Go"/></form>
>>> tag_label = src_soup.label
>>> tag_label
<label class="screen-reader-text">Search for:</label>
>>> attr_class = tag_form['class']
>>> attr_class
['search-form']
>>> attr_class2 = tag_label['class']
>>> attr_class2
['screen-reader-text']
>>>

미래실험실 pYTHON