BeautifulSoup을 사용해 웹 스크래핑하기

시사용어 모음집은 유료 서비스(예를 들면 에듀스)를 이용할 수 밖에 없었는데 단비뉴스라는 곳에서 감사하게도 시사용어를 소개하고 있는 페이지가 있어 파이썬을 사용해 초간단 웹 스크래핑을 했습니다.

1. 필요한 것

  • python 2.7+
  • BeautifulSoup 모듈

2. Code

# -*- coding: utf-8 -*-
import urllib
from bs4 import BeautifulSoup

#결과는 results.txt파일에 저장
results = open('results.txt','a')
#스크래핑 실패한 페이지 리스트
fail_list = []

#가장 최근 페이지가 6013, 숫자를 1씩 줄이면서 스크래핑
for i in range(6013, 0, -1):
#스크래핑 할 페이지 주소
    url = 'http://www.danbinews.com/news/articleView.html?idxno='+ str(i)
    try:
        html = urllib.urlopen(url)
        soup = BeautifulSoup(html, "lxml")
        #아티클의 제목: class가 view_t인것
        title = soup.find('td',class_='view_t').get_text().strip()
        # '##'를 제목 앞에 추가해서 마크다운 포멧으로 바꾸고 인코딩 변환
        title2 = '## '+ title.encode('utf-8') +'n'
        #아티클의 내용 찾기 : class id가 view_r 인것
        text = soup.find('td',class_ ='view_r')
        #불필요한 광고를 제거 하기 위해 p tag안 내용만 선택
        text2 = text.find_next('p').get_text()
        #인코딩과 마지막에 줄바꿈 추가
        text3 = text2.encode('utf-8') + 'n'
        #결과 파일에 제목 쓰기
        results.write(title2)
        #결과 파일에 내용 쓰기
        results.write(text3)
        #스크래핑 성공 메시지 출력
        print 'Success : '+ str(i) + 'th article'
    except:
        #URL이 없는 경우 스크래핑 실패 출력
        print 'Fail : ' + str(i) + 'th article'
        #실패 리스트에 추가
        fail_list.append(i)

    #close the results file
    results.close()
#스크래핑 끝나면 출력
print 'Finished'
print 'Fail list : '
print fail_list # 실패한 페이지 출력

3. 결과 확인

결과는 result.txt 파일에 저장됩니다.

파일은 금방 만들었는데 언제 다 읽나.