파이썬 웹 파싱 라이브러리 Beautiful Soup

Beautiful Soup은 파이썬의 HTML 파싱 라이브러리입니다.

이것만 있으면 웹 파싱은 순식간입니다. 파이썬의 편의성과 Beautiful soup의 유연함이 만나 최강곰비를 이루게 됩니다. 백문이 불여일견이라고 하죠. 먼저 예제를 보여드리도록 하겠습니다. 네이버 웹툰의 웹툰 목록을 긁어오도록하겠습니다.

#-*- coding: cp949 -*-
import urllib
from bs4 import BeautifulSoup
html = urllib.urlopen('http://comic.naver.com/webtoon/weekday.nhn')
soup = BeautifulSoup(html, "lxml")
titles = soup.find_all("a", "title")

for title in titles:
    print 'title:{0:10s} link:{1:20s}\n'.format(title['title'].encode('utf-8'), title['href'].encode('utf-8'))

urllib을 이용해서 naver 웹툰의 html 파일을 갖어와서 lxml 파서를 이용해서 BeautifulSoup 객체로 변환시킨뒤 원하는 요소를 갖어오는 코드입니다. 파서는 파이썬에 기본적으로 들어있는 html.parser을 쓸 수 있고, lxml 파서를 사용할 수 도 있습니다. lxml 파서가 기본 파서보다는 더 좋은듯 합니다.


http://www.crummy.com/software/BeautifulSoup

공식 홈페이지는 이곳이고, 이곳에서 BeautifulSoup을 다운 받을 수 있습니다. lxml 파서를 이용하고 싶다면 http://lxml.de/ 에가서 받으시면 됩니다. 참고로 lxml을 설치 할 때는 Cython이 필요합니다. 

BeautifulSoup은 굉장히 편하고 강력하기도 하면서, 문서화도 잘 되 있어서 사용하기에 전혀 어려움이 없습니다. 위의 코드를 보시가 시피 굉장히 짧은 코드로만도 굉장히 많은 일을 할 수 있습니다. 

 

또한 파이썬을 이용하는 것이다 보니 Django나 Google App Engine에서도 사용할 수 있어서 활용도에 있어서도 굉장하다고 생각합니다. 

BeautifulSoup을 알기 전까지는 HTML 파싱이 굉장히 귀찮고 힘들고 짜증나고 멘탈이 붕괴되는 일이었는데, BeautifulSoup을 알고 나서 부터는 웹 파싱이 이렇게 쉬울수가 없네요. 또 한번 신세계를 경험하는것 같았습니다.


저는 코드가 굉장히 깔끔하게 써지는 파이썬을 굉장히 선호하는데, BeautifulSoup은 저의 파이썬 사랑에 또 한번 힘을 실어 줄 것 같습니다. 참고로 저의 바람은 파이썬이 많은 분야에서 활용되서 인간세상을 널리 이롭게하는 것입니다!

저작자 표시
신고
  • zealot 주소 수정/제거 답글달기 2012.04.03 17:43 신고

    으아 ㅠㅠ 어려워요 ㅠㅠ

  • Min 주소 수정/제거 답글달기 2012.08.11 20:14 신고

    똑같이 했는데

    왜 line 9에서 \n'.format 이 부분...이 에러가 날까요?
    에러표시는 작은 따옴표에 빨간마크되어 나옵니다.
    syntax error 이구요..

    • Favicon of http://edoli.tistory.com 소리미아 에돌이 주소 수정/제거 2012.08.13 00:16 신고

      Python 3에서는 문법이 다릅니다.
      위 코드를 Python3로 옮겨보면 다음과 같습니다.


      import urllib.request
      from bs4 import BeautifulSoup
      html = urllib.request.urlopen('http://comic.naver.com/webtoon/weekday.nhn')
      soup = BeautifulSoup(html)
      titles = soup.find_all("a", "title")

      for title in titles:
      print('title:{0:10s} link:{1:20s}\n'.format(title['title'], title['href']))

  • haily 주소 수정/제거 답글달기 2014.02.06 17:19 신고

    안녕하세요!!! 이걸 그대로 따라 해봤는데

    Traceback (most recent call last):
    File "<pyshell#1>", line 1, in <module>
    from bs4 import BeautifulSoup
    ImportError: No module named bs4

    라는 오류가 뜹니다. from bs4 import BeautifulSoup 이걸 친 다음에 바로요.. 혹시나 해결방법을 좀 알 수 있을까요?
    파이썬,싸이썬,뷰티플수프,lxml까지 모두 다운을 받았는데 안되서 걱정입니다ㅠㅠㅠ

  • Favicon of http://blog.naver.com/kirokkk123 익룡이야 주소 수정/제거 답글달기 2014.04.28 23:02 신고

    덕분에 많은 도움 받았습니다! 참고해서 <네이버 웹툰 네트워크 분석> 작성했어요~
    http://blog.naver.com/kirokkk123/90194636915

  • 김덕훈 주소 수정/제거 답글달기 2014.08.18 20:09 신고

    요건 웹페이지 소스를 긁어오는것인가요? 혹시 소스에는 암호화되어있어서 못 읽고 요소검사로는 나오면 그런건 어떻게 파싱하나요?

  • 이민혁 주소 수정/제거 답글달기 2015.09.01 12:47 신고

    #!/usr/bin/python
    # -*- coding: cp949 -*-
    추가했는데도 한들이 깨져서 나오는데 어떻게 하면 될가요?
    title:諛???癒몃Т????link:/webtoon/list.nhn?titleId=414609&weekday=thu
    이렇게 나옵니다

  • 초보자 주소 수정/제거 답글달기 2016.02.23 04:16 신고

    그럼 밴드에 글도 크롤링 되나요?^^

비밀 댓글