정보공간_1

[6기 부산 정희록] Beautiful Soup #1 본문

IT 놀이터/Elite Member Tech & Talk

[6기 부산 정희록] Beautiful Soup #1

알 수 없는 사용자 2014. 8. 6. 22:55

Beautiful Soup #1

BeautifulSoup는 파이썬에서 간단하게 웹의 게시판이나 웹페이지의 내용을 가져오기 위한 라이브러리중의 하나입니다.
현재는 버전이 4.3.2 까지 Release되어 있고, Python 모듈 특성상 간단하게 설치가 가능합니다. 직접 예제를 통해 다양한 웹페이지의 파싱및 이미지를 간단하게 저장할 수 있으며 몇 줄 안되는 코드를 통해 어플리케이션 제작이 가능합니다. 이번시간에는 간단하게 Beautiful Soup를 소개하겠습니다. 참고는 주로 Beautiful Soup 홈페이지에서 참고하였고, 관련 용어 및 참조는 위키피디아에서 참고하였습니다.

먼저 Beautiful Soup는 파이썬 라이브러리로써 Screen-scraping 같은 프로젝트를 빠르게 개발하기 위한 모듈입니다.

Beautiful Soup는 HTML과 XML파일로부터 데이터를 뽑아내기 위한 라이브러리 입니다. 자신의 로컬컴퓨터에 HTML과 XML파일들이 존재한다면 직접 테스트를 바로 해볼수도 있으며 로컬컴퓨터에 존재하지 않는다면 웹클라이언트를 통해 접근하여 해당 HTML과 XML 파일을 다루는 방식으로 접근해야 합니다.

Beautiful Soup 3.X 버전에서는 Python 2을 지원하고 Python 3. 버전은 지원을 하지 않았습니다. 이후 나온 Beautiful Soup 4 에서 Python 3. 버전을 지원하기 시작하였고, 새로운 파서인 bs4 파서를 통해 HTML및 XML파일을 해석합니다.

 

 

 Beautiful Soup4 의 기능적인 특징은 다음과 같습니다.


1. 간단하고 적은 몇개의 메소드를 통해 웹페이지를 Navigating, Searching, Modifying 할수 있습니다.
2. HTML과 XML에 명시되어 있는 Encoding 방식으로 자동으로 Convert 하며, 만약 Encoding이 명시되어 있지 않다면, 기본적으로 Unicode로 Encoding을 합니다. 직접 Encoding 방식을 명시 할 수도 있습니다.
3. lxml과 html5lib 같은 Python Parsers등을 지원하고, speed와 flexibility를 위해 다른 Parser를 사용해도 됩니다.

파이썬 라이브러리 설치방법은 매우 간단합니다. 본인의 Python 개발환경이 리눅스이든 윈도우이든 상관없이 easy_install 라이브러리나 pip 라이브러리만 있다면 매우 간단하게 설치가 가능합니다. (만약 pip나 easy_install이 없다면 Python의 다양한 모듈을 설치하기 위해서라도 이번기회에 설치하시는것을 추천드립니다.)

윈도우에서는 Python이 설치된 경로 밑에 Scripts라는 폴더가 있습니다. Scripts 폴더에서 CMD창을 통해 설치가 가능합니다.

>>> easy_install beautifulsoup4
(혹은 pip beautifulsoup4)

리눅스에서는 sudo apt-get 명령어를 통해 설치가 가능하고 마찬가지로 easy_install 이나 pip를 통해서도 설치가 가능합니다.
리눅스환경에서는 기본적으로 Python 개발환경 및 환경변수가 등록이 되어 있기 때문에 특정경로가 아니더라도 설치가 가능합니다.

>>> sudo apt-get install python-bs4
(혹은 easy_install beautifulsoup4  /   pip beautifulsoup4)

easy_install이나 pip 같은 경우에는 PyPI라는 파이썬패키지인덱스에서 검색하여 모듈을 설치하기 때문에 해당 모듈이 PyPI에 등록이 되어있다면 easy_install 이나 pip를 통해 간단하게 설치가 가능하므로 파이썬을 공부하거나 개발하시는 분들은 easy_install, pip를 통해 원하는 모듈을 쉽게 설치하여 사용합니다.

Beautiful Soup 설치가 끝나면 해당 모듈을 사용하기 위해 Python은 import를 해야합니다.

from bs4 import BeautifulSoup 를 통해 BeautifulSoup를 import를하게 되고, 여기서 중요한건 bs4라는 모듈을 통해 BeautifulSoup 라는 객체를 가지고 오겠다라는 의미입니다. "from 모듈명 import 객체명" 입니다.



 간단하게 Naver 메인의 html문서를 들고왔습니다. 모든내용을 다들고 오진 않았고, 간단하게 부분적인 head 부분, body 부분을 복사해왔습니다. 이제 이런 html문서를 Beautiful Soup 객체에 넣어보겠습니다.



굉장히 간단하게 사용할수 있으며 제대로 들어왔는지 확인하기 위해 soup 객체를 통해 출력해보았습니다.



prettify() 메서드는 indent를 달리하여 사용자가 조금더 트리구조적으로 볼수 있게 띄워쓰기를 통해 사용자에게 보기 편하게 출력을 하기 위한 용도로 사용되는 메서드입니다. 실제 Naver를 웹도구를 통해 DOM탐색기로 본 화면입니다.



BeautifulSoup가 조금더 세밀하게 Content를 나눠주는걸 볼수 있습니다. BeautifulSoup의 간단한 메서드를 통해 얼마나 유용하게 어플리케이션을 제작할때 이 라이브러리의 도움을 받는것이 좋은지 보여드리겠습니다.


BeautifulSoup가 조금더 세밀하게 Content를 나눠주는걸 볼수 있습니다. BeautifulSoup의 간단한 메서드를 통해 얼마나 유용하게 어플리케이션을 제작할때 이 라이브러리의 도움을 받는것이 좋은지 보여드리겠습니다.



soup객체를 통해 간단 명료하게 파싱을 할수 있으며, 실제 개발도 개발자도구에서 간단하게 class 명이나 id 혹은 name 등을 통해 통일된 이름을 가져오거나 특정 태그를 아주 심플하게 가져올수 있습니다. 그리고 태그를 제외한 Text만을 들고 오고 싶을땐 간단하게 get_text() 라는 메서드를 통해 가져올수 있습니다.

 


Beautiful soup의 기본값은 unicode이므로 utf-8 이나 euc-kr등으로 인코딩을 하여 간단하게 HTML파일이나 XML파일의 텍스트만 들고 올수 있습니다. 이상으로 간단하게 Beautiful Soup에 대해서 소개하는 시간이었습니다. 다음 포스트때는 실제 Beautiful Soup를 통해 특정 사이트를 파싱하여 원하는 페이지를 제작하는 예제를 소개해드리겠습니다.