💻 프로그래밍/Python

BeautifulSoup로 웹 크롤링 하기

피트웨어 제이 (FitwareJay) 2017. 10. 29. 22:08

안녕하세요!! JAY입니다. 오늘은 파이썬으로 웹 크롤링을 해보도록 하겠습니다.

 

오늘 웹 크롤링을 하기 위해 BeautifulSoup 라는 API를 사용할 것 입니다.


BeautifulSoup는 HTML과 XML 파일로부터 데이터를 뽑아내기 위한 파이썬 라이브러리입니다. 


BeautifulSoup 문서 : https://www.crummy.com/software/BeautifulSoup/bs4/doc/


1. BeutifulSoup 설치


먼저 pip install beautifulsoup4 명령어로 BeautifulSoup를 설치해 줍니다.


추가로 우리는 URL을 가지고 크롤링을 해야하기 때문에 urlib패키지의 request모듈을 사용하겠습니다.




2.  URL 읽어오기

1
2
3
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import urllib.request


get_text라는 함수를 만들어 네이버 기사의 내용을 가져와 보도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
URL = 'http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=031&aid=0000428125'
 
 # 크롤링 함수
def get_text(URL) :
    source_code_from_URL = urllib.request.urlopen(URL)
    soup = BeautifulSoup(source_code_from_URL, 'html.parser')
    text = ''
    for item in soup.find_all('div', id = 'articleBodyContents') :
        text = text + str(item.find_all(text = True))
 
    return text
 


urllib.request.urlopen은 URL을 여는 함수입니다. URL 열기에 성공하면 response.status의 값이 200이 나옵니다

(200은 HTTP 상태 코드이며 서버가 요청을 제대로 처리했다는 뜻입니다).


    print(source_code_from_URL.headers)

    print(source_code_from_URL.code)

    print(source_code_from_URL.read())


위 코드를 보시면 읽어온 URL의 헤더와, 상태코드, 읽은 값을 출력하여 아래사진처럼 보여줄 수 있습니다.




다음은 BeautifulSoup를 사용해 데이터를 파싱하는 것입니다. 


BeautifulSoup는 파이썬 표준 라이브러리에 포함된 HTML 파서를 합니다. 그외에 다른 여러 HTML 파서들 또한 지원합니다.



BeautifulSoup(source_code_from_URL, 'html.parser') 는 html paraer로 파싱을 하겠다는 말입니다.


filnd_all함수로 특정 태그와 iD를 읽어옵니다. 크롤링할 웹페이지에서 페이지소스 보기를 하시면 



div 태그에 id가 articleBodyContents가 있는데, 바로 본문 내용입니다. 저희는 이 본문 내용만 크롤링 하겠습니다.


3. 크롤링 결과 출력


마지막으로 크롤링 결과를 확인하기 위해 출력을 해보도록 하겠습니다. 저는 추가로 text에도 저장하도록 하였습니다.


전체코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# -*- coding:UTF-8 -*-
from bs4 import BeautifulSoup
import urllib.request
 
# 출력 파일 명
OUTPUT_FILE_NAME = 'output.txt'
 
 # 긁어올 URL
URL = 'http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=031&aid=0000428125'
 
 # 크롤링 함수
def get_text(URL) :
    source_code_from_URL = urllib.request.urlopen(URL)
    soup = BeautifulSoup(source_code_from_URL, 'html.parser')
    text = ''
    for item in soup.find_all('div', id = 'articleBodyContents') :
        text = text + str(item.find_all(text = True))
 
    return text
 
# 메인 함수
def main() :
    open_output_file = open('output.txt''w')
    result_text = get_text(URL)
    open_output_file.write(result_text)
    open_output_file.close()
 
    print(result_text)
    
if __name__ == '__main__':
    main()
 



결과


자 제대로 기사의 본문 내용을 크롤링 한걸 볼 수 있습니다. 


지금까지 기본적인 BeautifulSoup 사용과 웹 크롤링에 대해서 알아봤습니다.


공식문서에 보면 설명이 잘 되어있어 사용에 크게 어려움은 없었습니다.


이상으로 오늘의 포스팅을 마치겠습니다!! 여러분 재밌는 코드 생산하시고 좋은하루 되세요:D