웹 크롤러(Web Crawler)의 개요 및 공지사항 크롤링 해보기
웹 크롤러(Web Crawler)의 개요 및 공지사항 크롤링 해보기
나동빈
※ 웹 크롤러의 개요 ※
웹 크롤러(Web Crawler)란 자동화된 방법으로 웹(WEB)에서 다양한 정보를 수집하는 소프트웨어를 의미합니다. 예를 들어 특정한 웹 사이트에 주기적으로 올라오는 글을 실시간으로 문자로 알림해주는 서비스 등을 직접 만들고 싶을 때 사용할 수 있습니다.
웹 크롤러가 매우 유용한 이유는 원하는 서비스로부터 원하는 정보를 편하게 얻어올 수 있기 때문입니다.
또한 웹 크롤러는 언어를 막론하고 자신이 원하는 언어로 개발할 수 있습니다. 필자는 오래 전부터 Java를 이용해왔으나 최근 Python이 웹 크롤러 기능을 매우 강력하게 지원하는 추세라서 Python으로 강의를 준비해보았습니다.
※ 웹 크롤러 개발환경 구축하기 ※
웹 크롤러를 개발하기 위해 기본적으로 파이썬(Python) 개발환경을 구축하셔야 합니다. 파이썬 개발환경이 구축되었다면 requests 라이브러리를 이용해 간단히 특정 URL의 HTML 소스코드를 가져오겠습니다. 타겟으로 설정한 사이트는 제 웹 사이트입니다.
웹 사이트 URL: http://www.dowellcomputer.com/main.jsp
import requests
# 특정 URL에 접속하는 요청(Request) 객체를 생성합니다.
request = requests.get('http://www.dowellcomputer.com/main.jsp')
# 접속한 이후의 웹 사이트 소스코드를 추출합니다.
html = request.text
print(html)
또한 웹 크롤러 개발을 위해 가장 많이 사용되는 라이브러리는 뷰티풀 수프(Beautiful Soup)입니다. 뷰티풀 수프는 특정 웹 사이트의 소스코드를 가져와 자유자재로 파싱(Parsing)하는 작업에 큰 도움을 줍니다. 저는 '최근 공지사항' 내용을 파싱하는 방법을 소개하고자 합니다.
한 번 웹 사이트에서 마우스 우클릭 이후에 '페이지 소스 보기(V)'를 눌러서 소스코드를 살펴봅시다.
이후에 아래와 같이 공지사항의 제목은 <td> 태그 내부의 <a> 태그로 구성되어 있는 것을 알 수 있었습니다.
따라서 뷰티풀 수프를 이용해서 위에서 작성한 소스코드를 확장해봅시다.
import requests
from bs4 import BeautifulSoup
# 특정 URL에 접속하는 요청(Request) 객체를 생성합니다.
request = requests.get('http://www.dowellcomputer.com/main.jsp')
# 접속한 이후의 웹 사이트 소스코드를 추출합니다.
html = request.text
# HTML 소스코드를 파이썬 객체로 변환합니다.
soup = BeautifulSoup(html, 'html.parser')
# <a> 태그를 포함하는 요소를 추출합니다.
links = soup.select('td > a')
# 모든 링크에 하나씩 접근합니다.
for link in links:
# 링크가 href 속성을 가지고 있다면
if link.has_attr('href'):
# href 속성의 값으로 notice라는 문자가 포함되어 있다면
if link.get('href').find('notice') != -1:
print(link.text)
소스코드 실행 결과 위와 같이 2건의 공지사항 제목이 출력된 것을 알 수 있습니다.
실제로 웹 사이트에서 보이는 '최근 공지사항' 내용과 정확히 일치합니다. 이상으로 간단한 형태의 웹 크롤러 개발 방법을 알아보았습니다.
'파이썬 크롤링(Python Crawling)' 카테고리의 다른 글
파이썬(Python) 경기일보 최신 기사 파싱하기 (0) | 2018.12.08 |
---|---|
파이썬(Python) 네이버 인기 검색어 파싱하기 (0) | 2018.12.08 |
셀레니움(Selenium)을 활용해 네이버 자동 로그인 및 메일 정보 가져오기 (2) | 2018.08.20 |
웹 크롤러(Web Crawler)로 자동 로그인 및 주요 정보 추출하기 (0) | 2018.08.20 |
웹 크롤러(Web Crawler)로 연속적인 크롤링하기 (1) | 2018.08.20 |