반응형

BeautifulSoup으로 웹 크롤링


웹 페이지 html은 태그, 요소, 속성 등의 구성요소를 사용해 구조적으로 웹페이지를 표시합니다. 

이런 구조화된 문서를 효율적으로 파싱해서 원하는 정보를 찾을 수 있는데, 파이썬 기본 모듈을 사용해도 되지만, Beautifulsoup을 사용하면 더욱 손쉽게 파싱할 수 있습니다.   


1. BeautifulSoup4 설치

파이썬에 기본 설치되는 라이브러리가 아니기 때문에, BeautifulSoup은 별도로 설치해야 합니다.

명령어는 다음과 같습니다.

(리눅스) sudo apt-get install python-bs4

(맥) pip install beautifulsoup4 또는 easy_install beautifulsoup4


2. virtualenv 환경에 대해

라이브러리를 프로젝트 단위로 구분해서 관리하면, 나중에 환경폴더 전체를 다른 컴퓨터로 옮기기가 매우 쉽습니다. 따라서, virtualenv 가상 환경을 사용하는 것이 매우 편리하다는 점을 언급하고 싶습니다. 

pyenv와 virtualenv는 구글링해 보면 설정하는 법이 나와 있으니 참고하면 될 것 입니다.


3. 기본 사용 예제

>>> from urllib.request import urlopen

>>> from bs4 import BeautifulSoup

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

>>> soup = BeautifulSoup(html, 'html.parser')

>>> nameList = soup.find_all('span', {'class':'green'})

>>> for name in nameList:

             print(name.get_text())

jupyter notebook에서 실행해본 결과!


위 사용 예제(참조:파이썬으로 웹 크롤러 만들기)에서, 몇가지 주석을 달아봅니다. 

먼저, {'class':'green'}은 class_ = 'green'으로 변경해서 사용할 수 있습니다. class가 예약어이기 때문에, class_로 표시해야 제대로 처리됩니다.

get_text()는 현재 문서에서 모든 태그를 제거하고 텍스트만 들어 있는 문자열을 반환합니다. 

예를 들어, 하이퍼링크, 문단, 기타 태그가 여럿 들어 있는 텍스트 블록에 사용하면 태그 없는 텍스트만 남기 때문에, 가장 마지막에 원하는 텍스트를 얻을 때 사용하는 것이 좋습니다.

BeautifulSoup를 사용해서 웹페이지를 크롤링하다 보니, re도 많이 사용해야 하더군요. 그리고, 웹페이지 구조를 파악하는 것도 익숙해져야 하구요. 


가끔 웹페이지 크롤링한 예제를 올려보도록 하겠습니다. 

참고) https://www.crummy.com/software/BeautifulSoup/bs4/doc/




반응형

+ Recent posts