한빛출판네트워크

기획연재

[파이썬으로 웹 크롤러 만들기] 첫 번째 웹 스크레이퍼(1/2)

한빛미디어

|

2016-12-08

by 한선용

1.2 BeautifulSoup 소개

 

아름다운 수프, 풍부한 녹색,

그릇에서 기다리거라!

누가 이 맛있는 것에 숙이지 않으리?

저녁 수프, 아름다운 수프!

 

11.png

 

BeautifulSoup 라이브러리는 루이스 캐럴의 『이상한 나라의 앨리스』에 나오는 동명의 시에서 이름을 따왔습니다. 이야기 속에서는 ‘모조 거북’이 이 노래를 부릅니다. 이상한 나라에서 왔으니, BeautifulSoup도 이상한 것들을 이해할 수 있습니다. Beautiful Soup는 잘못된 HTML을 수정하여 쉽게 탐색할 수 있는 XML 형식의 파이썬 객체로 변환하므로 골치 아픈 웹을 탐색할 때 유용합니다.

 

1.2.1 BeautifulSoup 설치

BeautifulSoup 라이브러리는 기본 파이썬 라이브러리가 아니므로 반드시 설치해야 합니다. 이 책에서는 BeautifulSoup4 라이브러리 (BS4라고도 합니다)를 사용할 겁니다. BeautifulSoup 4의 완전한 설치 방법은 Crummy.com에서 찾을 수 있습니다. 기본적으로 리눅스에서는 다음과 같이 하면 됩니다. (역자주_ 파이썬 2.x와 3.x가 모두 설치되어 있다면 python-bs4 대신 python3-bs4를 설치해야 합니다.)

$ sudo apt-get install python-bs4

 

맥에서는 다음과 같이 합니다.

$ sudo easy_install pip

 

위 명령어는 파이썬 패키지 관리자 를 설치합니다. 그다음 다음 명령을 실행해서 라이브러리를 설치합니다.

$ pip install beautifulsoup4

 

다시 말하지만, 컴퓨터에 파이썬 2.x와 3.x가 모두 설치되어 있다면 python3을 명시적으로 호출해야 합니다.

$ python3 myScript.py

 

패키지를 설치할 때도 명시적으로 파이썬 3임을 표시해야 하며, 그렇지 않으면 패키지가 파이썬 2.x용으로 설치될 수 있습니다.

$ sudo python3 setup.py install

 

pip를 사용한다면 pip3을 호출해서 패키지를 파이썬 3.x 버전으로 설치할 수 있습니다.

$ pip3 install beautifulsoup4

 

윈도우에서 패키지를 설치하는 것도 맥이나 리눅스와 거의 같습니다. 위 URL에서 최신BeautifulSoup 4를 내려받고 그 디렉터리로 이동해서 다음 명령을 실행합니다.

> python setup.py install

 

이렇게만 하면 BeautifulSoup가 파이썬 라이브러리로 인식됩니다. 파이썬 터미널을 열고 임포트해서 테스트해볼 수 있습니다.

$ python

> from bs4 import BeautifulSoup

 

이렇게 임포트할 때 에러가 없어야 합니다. 또한 윈도우용 pip(https://pypi.python.org/pypi/setuptools)는 .exe 실행 파일도 있으므로 패키지를 쉽게 설치하고 관리할 수 있습니다.(역자주_ 파이썬 3.4부터는 기본 설치 시 pip도 함께 설치되므로 pip를 별도로 받을 필요는 없습니다.)

> pip install beautifulsoup4

 

 


<라이브러리와 가상 환경 묶기>

파이썬 프로젝트 여럿을 관리하거나, 프로젝트를 배포할 때 연결된 라이브러리를 모두 묶을 쉬운 방법이 필요하거나, 설치된 라이브러리들이 충돌할까 봐 걱정이라면 파이썬 가상 환경을 설치해서 관리하기 쉽게 분리할 수 있습니다. 가상 환경 없이 설치한 파이썬 라이브러리는 전역으로 설치됩니다. 라이브러리를 전역으로 설치하려면 보통 관리자 권한이 필요하며, 이렇게 설치한 파이썬 라이브러리는 모든 사용자와 모든 프로젝트에서 사용할 수 있습니다. 다행히도 가상 환경은 쉽게 설치할 수 있습니다.(역자주_ virtualenv가 설치되어 있지 않다면 pip install virtualenv로 먼저 설치합니다.)

$ virtualenv scrapingEnv

 

이 명령은 새 환경 scrapingEnv을 만듭니다. 만든 새 환경을 사용하려면 반드시 활성화해야합니다.(역자주_ 윈도우에서는 bin 폴더 대신 Scripts 폴더를 사용합니다.)

$ cd scrapingEnv/

$ source bin/activate

 

환경을 활성화하면 환경의 이름이 명령 프롬프트에 표시되어 현재 가상 환경에 있음을 알립니다.

가상 환경에서 라이브러리를 설치하거나 스크립트를 실행하면 그 환경에만 영향이 있습니다. 물론 새로 설치한 scrapingEnv 환경에도 BeautifulSoup를 설치하고 사용할 수 있습니다.

(scrapingEnv)...$ pip install beautifulsoup4

(scrapingEnv)...$ python

> from bs4 import BeautifulSoup

>

 

deactivate 명령어로 환경에서 떠날 수 있습니다. 일단 환경에서 떠나면 그 가상 환경에 설치한 라이브러리에 더는 접근할 수 없습니다.

(scrapingEnv)...$ deactivate

$ python

> from bs4 import BeautifulSoup

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ImportError: No module named 'bs4'

 

라이브러리를 프로젝트 단위로 구분하면 나중에 환경 폴더 전체를 압축해서 다른 사람에게 보내기도 쉽습니다. 프로젝트를 받은 사람의 컴퓨터에 같은 파이썬 버전이 설치되어 있기만 하면 그 사람이 라이브러리를 따로 설치하지 않아도 당신이 만든 코드가 해당 가상 환경에서 그대로 동작합니다.

이 책의 예제에서 가상 환경을 쓰라고 명시적으로 언급하지는 않겠지만, 가상 환경은 언제든 활성화하기만 하면 사용할 수 있음을 기억하십시오.


 

1.2.2 BeautifulSoup 실행

BeautifulSoup 라이브러리에서 가장 널리 쓰이는 객체는 물론 BeautifulSoup 객체입니다.

이 장 초반에서 만든 예제를 수정해 BeautifulSoup 객체를 사용해봅시다.

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page1.html")

bsObj = BeautifulSoup(html.read(), "html.parser")

print(bsObj.h1)

 

출력 결과는 다음과 같습니다.

<h1>An Interesting Title</h1>

 

이전 예제와 마찬가지로 urlopen 라이브러리를 임포트하고 html.read()를 호출해서 페이지의 HTML 콘텐츠를 얻었습니다. 이 HTML 콘텐츠를 변형한 BeautifulSoup 객체의 구조는 다음과 같습니다.

 

html → <html><head>...</head><body>...</body></html>

  — head → <head><title>A Useful Page</title></head>

    — title → <title>A Useful Page</title>

  — body → <body><h1>An Int...</h1><div>Lorem ip...</div></body>

    — h1 → <h1>An Interesting Title</h1>

    — div → <div>Lorem Ipsum dolor...</div>

 

페이지에서 추출한 <h1> 태그는 BeautifulSoup 객체 구조(html → body → h1)에서 두 단계 만큼 중첩되어 있습니다. 하지만 우리가 객체에서 가져올 때는 h1 태그를 직접 가져옵니다.

bsObj.h1

 

사실 다음 중 무엇을 사용해도 결과는 같습니다.

bsObj.html.body.h1

bsObj.body.h1

bsObj.html.h1

 

이걸 보고 BeautifulSoup 라이브러리가 얼마나 강력하고 단순한지 느낄 수 있길 바랍니다. 원하는 정보를 둘러싼, 혹은 그 주변에 태그가 있기만 하면 HTML(XML) 파일에서 어떤 정보든 추출할 수 있습니다. 3장에서는 더 복잡한 BeautifulSoup 함수 호출 방법과 BeautifulSoup 객체와 정규 표현식을 함께 써서 웹사이트에서 정보를 추출하는 법을 알아보겠습니다.

 

22.png

 

 

 

파이썬으로 웹 크롤러 만들기

초간단 나만의 웹 크롤러로 원하는 데이터를 가져오는 방법

bb.png

 

이전 글 : 이전글이 없습니다.

다음 글 : [파이썬으로 웹 크롤러 만들기] 첫 번째 웹 스크레이퍼(2/2)

댓글 입력