[파이썬으로 웹 크롤러 만들기] 첫 번째 웹 스크레이퍼(1/2)
1.2 BeautifulSoup 소개 아름다운 수프, 풍부한 녹색, 그릇에서 기다리거라! 누가 이 맛있는 것에 숙이지 않으리? 저녁 수프, 아름다운 수프! 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 " ", line 1, in 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) 출력 결과는 다음과 같습니다. An Interesting Title 이전 예제와 마찬가지로 urlopen 라이브러리를 임포트하고 html.read() 를 호출해서 페이지의 HTML 콘텐츠를 얻었습니다. 이 HTML 콘텐츠를 변형한 BeautifulSoup 객체의 구조는 다음과 같습니다. • html → ... ... — head → A Useful Page — title → A Useful Page — body → An Int... Lorem ip... — h1 → An Interesting Title — div → Lorem Ipsum dolor... 페이지에서 추출한 태그는 BeautifulSoup 객체 구조( html → body → h1 )에서 두 단계 만큼 중첩되어 있습니다. 하지만 우리가 객체에서 가져올 때는 h1 태그를 직접 가져옵니다. bsObj.h1 사실 다음 중 무엇을 사용해도 결과는 같습니다. bsObj.html.body.h1 bsObj.body.h1 bsObj.html.h1 이걸 보고 BeautifulSoup 라이브러리가 얼마나 강력하고 단순한지 느낄 수 있길 바랍니다. 원하는 정보를 둘러싼, 혹은 그 주변에 태그가 있기만 하면 HTML(XML) 파일에서 어떤 정보든 추출할 수 있습니다. 3장에서는 더 복잡한 BeautifulSoup 함수 호출 방법과 BeautifulSoup 객체와 정규 표현식을 함께 써서 웹사이트에서 정보를 추출하는 법을 알아보겠습니다. 파이썬으로 웹 크롤러 만들기 초간단 나만의 웹 크롤러로 원하는 데이터를 가져오는 방법
한선용
