Python — 원숭이도 따라할 수 있는 크롤러 만들기

Hosuk Shin
4 min readAug 25, 2016

--

세상에는 엄청나게 방대한 정보들이 나뒹굴고 있다. 하지만 그것들을 일일이 확인하면서 나의 정보 리스트에 쌓는 것이란 거의 불가능에 가깝다. 예시로 AKB48의 멤버들의 산발적으로 발생하는 멤버들의 소식을 직접 수집하기는 힘들다. 하지만 나늘 대신해서 24시간 매일 확인을 해주는 녀석이 있다면 어떨까.

크롤러란?

구글 검색 크롤러는 엄청난 규모의 데이터를 확인하고 일련의 방식으로 정보를 가져오고 저장한다. 참조 : http://www.bloter.net/archives/166941

크롤링이란 단어는 ‘웹 페이지를 그대로 가져온 뒤, 가져온 내용을 기반으로 데이터를 추출해 내는 행위’라 한다. 이 방식을 이용해 구글이나 네이버는 전세계에 있는 여러 사이트들의 정보를 크롤러를 이용해서 가져온 뒤, 자신의 정보로 저장하여 검색을 할때 이전에 저장한 정보들을 확인하여 가져오는 것이다.

혹은 개인들이 대량의 웹사이트 정보를 가져올때, 특히 수작업으로 하기에는 너무나 작업량이 많을때, 크롤러를 이용하여 웹사이트에 있는 정보들을 가져와 저장하기도 한다.

그리하여 이 글은 간단하게 크롤러를 만든 것에 대해서 소개를 하고, 다른 이들도 이 글을 통해서 자신도 크롤러를 돌릴 수 있도록 하기 위하여 작성한다.

lupin crawler 소개

당신의 업무 시간을 웹툰을 이용하여 뺏을 크롤러, lupin crawler

회사에서는 웹툰의 알람을 받기란 참으로 어렵고 난감하다. 스마트폰을 이용하여 알람을 받을 수 있지만, 그러기 위해서는 휴대폰을 확인해야만 한다. 그렇다고 컴퓨터를 통해서 웹툰 알람을 받는 것은 서비스가 정식으로 되어 있는 것이 없기 때문에 힘들다.

이 와중에 회사(스타트업을 중심으로) 내에서 사용하는 메신저는 보통 Slack과 Jandi를 많이들 사용한다. 이 메신저들은 자신들의 API를 이용하여 직접 메세지를 전송할 수 있는 기능을 제공하고 있다.

이런 목표와 기술들을 이용하여 네이버 웹툰을 주기적으로 확인하여 변화가 생겼을 경우, 자신의 사내 메신저로 변화 사실을 보내 웹툰을 확인할 수 있는 lupin crawler를 만들어냈다.

lupin crawler 구조 및 작동 방식

lupin cralwer의 구조

lupin crawler의 구조는 단순하다.

BaseCrawler.py는 모든 크롤러들이 공통적으로 사용하는 기능들을 담아낸 클래스이다. 여기서 사이트에서 정보들을 가져오는 부분이 BaseCrawler.py 내에 존재한다.

HtmlCrawler.py는 사이트의 Html을 통해서 정보를 가져오는 기능을 담아낸 클래스이다. BaseCrawler.py를 통해서 정보들을 가져온 뒤, BeautifulSoup을 이용해서 Html의 태그, 클래스와 id등을 이용하여 찾고자 하는 부분을 추적할 수 있도록 하였다.

Crawlers.py는 BaseCrawler.py 혹은 HtmlCrawler.py 등을 이용하여 정보들을 수집하고자 하는 사이트의 목록들을 나열한 곳이다. 예를 들어 Crawlers.py 안에서 네이버 웹툰의 정보를 가져오는 클래스를 만든다. 이 클래스에는 어떠한 url을 통하여 정보를 가져올지, 어떠한 Crawler(BaseCrawler.py, HtmlCrawler.py등)을 이용하여 정보를 가져올지, 최종적으로 어떠한 부분을 확인하여 새로운 웹툰이 올라왔는지 결정을 하여 목록으로 변환하여 반환할지를 결정한다.

LupinCrawler.py 가 메인 클래스로서 크롤러의 작동, 메신저 전송, 상황 확인 기능을 담당하고 있다. 이전의 Crawlers.py에서 목록들을 모두 가져와서 초기화한뒤, 정보들을 가져오고 목록으로 저장한다. 매 시간마다 확인하여 이전 목록과 변화점이 있으면 사내 메신저(Slack, Jandi)로 메세지를 발송하는 것이다.

자신이 매일 확인하고자 하는 사이트를 이 기본적인 크롤러가 대신하여 체크할 수 있을 것이다. 혹은 가져온 정보를 데이터베이스에 저장하는 크롤러로도 변형을 시킬 수 있을 것이다. 실제 코드는 https://github.com/erishforG/lupin_crawler에 있다.

--

--