파이썬으로 웹사이트 데이터 크롤링하기(HOW TO CRAWL WEB DATA)



  웹사이트에서 데이터를 가져오는것은 어렵지 않다. 일단 처음에는 파일을 만들고 웹사이트에서 마우스로 클릭하여 복사하고 붙여넣으면 되는 간단한 작업이다. 하지만 엄청나게 많은 데이터가 필요할때는 어떻게 웹사이트의 정보를 가져올 수 있을까? 방법은 간단하다. 파이썬을 활용하면 된다. 파이썬에 세계에 들어가 봅시다.

  It is easy to get data from a website. You make your file and copy the data and paste it in. However, it needs tremendously amount of time to get millions of data from websites. So how do we collet these data? There is the programming language something called Python. Let's talk about it.

1. 파이썬 설치하기

파이썬은 프로그램 파이참(PyCharm)을 통해서 유용하게 사용할 수 있다. 물론 프로그램 없이도 터미널을 통해서 파이썬을 이용할 수 있지만, 파이참을 이용하면 제약없이 파이썬을 사용할 수 있기 때문에 다운받아서 사용하는것을 추천한다. 홈페이지에 접속하면 무료로 Community 버전을 다운받을 수 있다.
PyCharm Website



2. 크롤링 웹사이트 선택하기

모든 웹사이트가 크롤링에서 자유롭지는 않지만 대부분의 웹사이트에서 크롤링을 할 수 있다. 여러 웹사이트 중에서 CNN을 타겟으로 크롤링을 해 보겠다.

website address : http://www.cnn.com/2017/10/24/politics/jeff-flake-senate-speech-lines/index.html

3. 웹사이트에서 개발자 도구 버전으로 소스를 확인한다.


개발자 도구 버전으로 본문의 내용이 어떤 태그에 있는지 확인한다. 이 과정에서는 HTML의 이해도가 필요하다. 내가 CNN 웹사이트에서 찾은 본문의 TAG는 Section라는것을 찾았고, id는 body-text이라는 것을 알 수 있다.

4. 파이참을 통해서 코드를 작성한다.

파이참을 통해 새로운 파이썬 파일을 만든다. 그리고 다음과 같은 코드를 붙여넣기 한다.

#-*- coding: utf-8 -*-

from bs4 import BeautifulSoup
import urllib

OUTPUT_FILE_NAME = 'output.txt'
URL = 'http://www.cnn.com/2017/10/24/politics/jeff-flake-senate-speech-lines/index.html'
def get_text(URL):    source_code_from_URL = urllib.urlopen(URL)
    soup = BeautifulSoup(source_code_from_URL, 'lxml', from_encoding='utf-8')
    text = ''    for item in soup.find_all('section', id='body-text'):        text = text + str(item.find_all(text=True))
    return text

def main():    open_output_file = open(OUTPUT_FILE_NAME, 'w')
    result_text = get_text(URL)
    open_output_file.write(result_text)
    open_output_file.close()

if __name__ == '__main__':    main()

1) 모든 소스를 해석할 수는 없지만 처음 주석문장은 한글로 변환을 할때 필요한 문장이다.

2) 또한 BeautifulSoup과 urllib는 웹사이트에서 정보를 가져오는 역할을 하기 때문에 필수적으로 컴퓨터에 설치가 되어 있어야한다. 이것들은 터미널을 통해서 간단하게 설치할 수 있다.

3) OUTPUT은 프로그램을 실행한 후에 생기는 텍스트파일을 의미한다.

4) URL은 웹사이트 주소이므로 크롤링 타겟을 설정하는 단계이다.

5) get_text funtion은 웹사이트에서 본격적으로 문자를 긁어오는 단계이다.
여기에서 중요하게 우리가 수정을 해야할 것은 for item in soup.find_all('section', id='body-text'):
for loop은 문자들을 계속적으로 찾는 역할을 하므로 안에 있는 variable을 바꿔주면 된다.
첫번째 변수는 앞에서 설명한 Tag 이고 CNN웹사이트에서는 section으로 설정이 되었다. 보통 'div'
두번째 변수는 id로써 웹개발자에 의해서 정해지므로 웹페이지마다 다 다른 값을 가지고 있다. CNN에서는 body-text 라고 설정이 되었다.

6) 다음 main function은 위에 있는 코드를 실행하는 역할을 하므로 수정할 필요가 없다.


5. 작성한 파이썬 소스를 저장하고 파일을 실행한다.

터미널로 파이썬 파일을 실행하기 전에 디렉토리 (파일의 위치)를 파악해야 한다. 터미널은 마우스로 파일의 위치를 파악할 수 없으므로 윈도우나 맥의 검색을 통해서 파일의 위치를 확인한 후 터미널에서 실행 할 수 있도록 한다.

cd /Users/Name/PycharmProjects/ProjectName
python Filename.py
open output.txt

첫번째 문장은 터미널에서 파이썬 파일이 저장되어 있는 위치까지 이동하는 역할이다.
다음 문장은 파이썬 파일을 실행시킨다.
세번째 문장은 마지막 결과인 텍스트파일을 실행한다. 






댓글 없음:

Powered by Blogger.