안녕하세요. 지난 시간에 이어 웹 크롤러 만들기 2번째 시간입니다. 지난 시간에는 BeautifulSoup 를 이용해서 특정 사이트의 글 목록 리스트에서 URL, 제목을 파이썬으로 가지고 오는 방법에 대해 알아 보았습니다. 이번에는 그 연장선상으로 URL, 제목에 해당하는 글의 본문 내용을 가지고 오게 만들어 보겠습니다. 시작하겠습니다.
앞 시간의 코드에서 각 글의 본문 내용을 확인할 수 있도록 하는 함수 get_single_article(item_url) 을 만들어 주었습니다. 물론, 함수명은 원하는 이름으로 정하여도 무방합니다.▼
앞서 만든 코드에서 지금부터 만들어 줄 함수가 들어가는 위치에서 호출할 수 있도록 함수 호출 부분을 삽입합니다. page += 1 위에 함수 호출 코드를 넣어 주었습니다. ▼
이제 각 본문 데이터를 가지고 올 부분을 코딩해 보겠습니다. 앞에서 다룬 내용과 크게 차이가 나지 않습니다. url 값을 이용해서 해당 페이지의 데이터를 읽어오게하여 source_code 변수에 저장합니다. ▼
이 소스코드를 텍스트 변환하여 plain_text 에 넣어줍니다.▼
BeautifulSoup 를 이용해서 파싱을 하고 soup 에 저장을 합니다.
이렇게 해서 저장된 값에서 본문 내용에 해당하는 HTML 태그를 확인하여 선택하게 합니다. 이렇게해서 얻어진 태그를 반복문을 돌려 출력하게 합니다. 추후에는 파일의 형태로 저장을 하게 할 예정입니다. ▼
이제 결과를 확인해 보겠습니다. URL, Title 까지 확인 할 수 있었던 결과에서 본문 내용이 추가적으로 나오게 되었습니다. 만약 수만 페이지에 해당하는 사이트가 있다면 max_pages 와 URL 값, 각각의 데이터가 들어가는 HTML 태그를 수정하면 됩니다.▼
전체 코드
import request
from bs4 import BeautifulSoup
def spider(max_pages):
page = 1
while page < max_pages:
url = 'http://creativeworks.tistory.com/' + str(page)
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, 'lxml')
for link in soup.select('h2 > a'):
href = "http://creativeworks.tistory.com" + link.get('href')
title = link.string
print(href)
print(title)
get_single_article(href)
page += 1
def get_single_article(item_url):
source_code = requests.get(item_url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text, 'lxml')
for contents in soup.select('p > span'):
print(contents.text)
spider(2)
지금까지 기초적인 웹 크롤러를 만들어 보았습니다. 사고를 조금만 확장한다면 이 크롤러를 이용한 다양한 애플리케이션(AP)를 만들어 활용할 수 있을 것입니다. 추후에 중급, 고급 과정도 만들 예정인데, 그 때에는 보다 고차원적인 크롤링에 대해서 알아보도록 하겠습니다. 수고 하셨습니다.
'Programming > Python Tutorials' 카테고리의 다른 글
[PYTHON 3] Tutorials 27. Classes and Objects - 클래스, 객체 (3) | 2015.12.03 |
---|---|
[PYTHON 3] Tutorials 26. Exceptions - 예외처리 (0) | 2015.12.03 |
[PYTHON 3] Tutorials 24. 웹 크롤러(like Google) 만들기 1 - How to build a web crawler (63) | 2015.11.30 |
[PYTHON 3] Tutorials 23. Downloading Files from the web - 파일 다운로드 하기 using 파이썬 (10) | 2015.11.27 |
[PYTHON 3] Tutorials 22. How to read and write Files - 파이썬에서 파일 읽고 쓰기 (0) | 2015.11.25 |