본문 바로가기

파이썬 프로그래밍/파이썬 크롤링

[Python] 파이썬의 Beautiful Soup를 이용한 파싱

파싱이란 가공되지 않은 데이터에서 원하는 특정한 문자열을 빼내는 작업


이전글과는 같은 작업이지만 다르다는 점은 Beautiful Soup모듈을 사용하여 간편하게 작업한다는 점입니다.


먼저 파이썬에서 Beatiful Soup를 다운받습니다.


cmd창에서 해당 명령어를 통해 beautifulsoup4버전이 설치되어 있는지 확인합니다.

없으시다면

pip install beautifulsoup  를 입력하셔서 설치해주면 됩니다



설치가 완료되셨다고 가정한 후에 시작하겠습니다




지금 우리는 네이버 영화랭킹 타이틀만을 파싱하려고 합니다.

먼저, 하시기전에 HTML을 어느정도 보실줄 아셔야 도움이 되십니다.



ctrl+u를 누르시면 페이지 소스보기가 됩니다 페이지 소스를 살펴봅시다

내려보시다 보면 눈치 채신분들도 있을겁니다. 순위 영화명 변동폭 보이시나요? 그렇다면 화면에서도 저 3글자가 보이시나요? 대충 th(table head)면 표의 제목부분인데 이정도만 봐도 아하 이 테이블은 랭킹테이블이구나 알 수 있습니다

쭉 내려오시면 제목들이 div class="tit3"으로 제목들이 묶에있는것을 확인 하실 수 있습니다


그렇다면 감이 오시나요? 예 맞습니다 저는 tit3을 쪼개서 그 안에서 제목을 다시 쪼개줄겁니다 그럼 타이틀 제목만 나오게 됩니다.




드래그용 코드

import urllib2
import BeautifulSoup
url="http://movie.naver.com/movie/sdb/rank/rmovie.nhn"
soup = BeautifulSoup(urllib2.urlopen(url).read())
pkg_list=soup.findAll("div", "tit3")

count = 1
for i in pkg_list:
title = i.findAll('a')
print count, "위: ", str(title)[str(title).find('title="')+7:str(title).find('">')]
count=count+1

가독성을 높이기 위한 코드



실행화면


코드 설명

import urllib2        //urllib2를 불러온다

import BeautifulSoup //방금 설치했던 BeautifulSoup도 불러온다

url="http://movie.naver.com/movie/sdb/rank/rmovie.nhn" //내가 파싱할 홈페이지 주소를 url에 넣어준다

soup = BeautifulSoup(urllib2.urlopen(url).read()) //BeautifulSoup를 생성하고 url을 soup에 넣어준다
 //url을 다룰모듈.url을 열어준다.결국 url관련 데이터를 읽어온다고 생각하면 된다
(괄호안 설명입니다)
pkg_list=soup.findAll("div", "tit3")    //위에서 만들어준 soup(결국은 url임)를 전부 찾아주는데 그중 (div, iti3)
//div값이 tit3인 녀석들을 전부 가져온다는 얘기입니다
//위에서 html 설명보시면 이해가 잘되실껍니다
//결국 url값을 .모두가져오는데 그중 (tit3)의 값을 모두가져와 pkg_list에 넣는다고 보시면 됩니다

count = 1               //이쁘게 하기위해서 카운트를 해줄껍니다 #위 #위 순위 주려고 하는데 0하면 0위부터이니 1로 줍니다

for i in pkg_list:        //pkg_list를 계속 불러와 i에 누적시켜준다

title = i.findAll('a')    //위에 div tit3만 추출해오면 이쁘지가 않고 지저분한 값까지 전부 긁어오기때문에 지금 
                                     긁어온 값에서 a로 다시한번 쪼개줍니다 현제 tit3을 a로 한번 더 쪼개준셈입니다
그 값을 title에 넣어준다
print count, "위: ", str(title)[str(title).find('title="')+7:str(title).find('">')]
//이제 세밀해게 쪼개주는 작업입니다 위에 html코드 보시면 title= 하고 제목나오는 모습이 보이실껍니다
+7의 이유는 "title="'에서 시작값까지 포함하기 때문에  t i t l e =" 값을 건너뛴 7이 되겠습니다

또한가지 str해주는이유는 위에서는 soup값을 받아왔기 때문에 문자열로 인식하여야 파이썬이 처리를 하기 때문에 str로 해준다는점입니다


count=count+1    //이 코드가 없다면 모든 영화가 1위일겁니다. 한번 실행하면 +1로 다음순위가 되도록 +1값을 
올려  줍니다







어디까지나 제가 학습 목적으로 한 포스팅 입니다. 제가 이해한대로 코드해석을 했기 때문에 틀릴 수도 있고 틀리다면 지적해주시면 감사하겠습니다.

질문도 받습니다