본문 바로가기

프로그래밍/크롤링(PYTHON)

크롤러 마음놓고 돌리기 - Scrapinghub

반응형
Scrapinghub와 관련해서 궁금한 점이 있으시거나 잘못된 정보가 있다면, 댓글로 알려주시면 감사드리겠습니다!

방학동안에 열심히 크롤링을 하고, 블로그 포스팅도하고, 인턴에 지원했는데 합격했다(?). 그래서 약 5개월 간 포스팅이 없다시피 했다. 중간에 갑자기 데이터베이스 관련 포스팅을 올린 건 일하면서 필요해서 올렸고, 사실 상 포스팅이라고 하기에도 분량이 너무 귀엽고 소중했다.

어쨌든, 오늘 다뤄볼 주제는 Scrapinghub라는 서비스에대한 소개로 해볼까한다. 이 글의 카테고리가 "크롤링" 이고, 제목으로 어느정도 유추할 수 있을 듯하다. [광고같은건 아니다..]

Scrapinghub는 클라우드 기반으로 크롤링을 비롯한 다양한 기능을 제공하는 웹사이트다. 유저가 크롤러 코드를 작성해서 클라우드에 업로드하면, 크롤러는 Scrapinghub의 환경에서 구동된다. 당연히 IP도 바뀐다.

기본적으로 Python에서 꽤 유명한 Framework인 Scrapy만을 지원한다. 로컬에서 Scrapy 프로젝트를 하나 만들어서 프로젝트 통째로 Scrapinghub에 업로드하면, 프로젝트 내부의 Spider [Scrapy에서 크롤링 기능의 주축이 되는 클래스] 를 인식해서 크롤러를 실행한다.

이것만해도 괜찮은 서비스라고 생각하는데, [무료니까..] 개인적으로 생각하는 좋은 기능들은 다음과 같이 추려볼 수 있겠다.

 

크롤러 구동 중 실시간으로 상태확인


크롤러를 업로드하고 실행하면, 실시간으로 진행상황을 대시보드에서 확인할 수 있다. 크롤러가 어떤 URL로 리퀘스트를 보냈는지, 구동 시간은 얼마나 됐는지, 발생한 에러가 있는지 등 다양하게 확인할 수 있다.

업로드한 크롤러를 실행시킬때 마다 Job이라는 항목이 추가되고 위와같이 대시보드에서 확인할 수 있다.

프로젝트 아이디 등 일부 항목은 자른 캡쳐본이다. 위 처럼 지금까지 수집된 item 은 몇 개이고, Request 는 몇 개고 로그는 몇 개, 구동 시간은 얼만큼 됐는지 확인할 수 있다. outcome cancelled 는 유저가 취소시킨 job 임을 의미한다.

 

실시간 로그확인 가능


크롤러가 실행되고 있는 상황에서 실시간으로 로그를 확인할 수 있다. 로컬에서 크롤러를 돌리는 것 처럼 가능하다. 사실 강력한 디버깅 기능이 있는 IDE를 두고 단순 텍스트 필터로 로그 검색을 하는 게 좋다고 말하는 게 조금 어불성설이긴 하지만.. 크롤링 특성상 로컬에서 돌리기 꺼려지는 상황이 분명히 있어서.. Scrapinghub 는 나름대로의 디버깅 기능을 넣어준게 아닐까..? 어쨌든 검색 기능 덕분에 디버깅에 용이하긴 하다. [실 조금 문제가 있긴하다]

이런식으로 각 로그는 라인이 매겨지고 내용이 붙는다. stdout 의 경우 크롤러에서 stdout으로 나오는 출력을 똑같이 찍어준다. 가령 print("hello") 의 출력은 [stdout] 이 붙어서 로그에 기록된다는 것.

 

크롤러의 Request 정보 추적 및 확인


거창하게 정보 추적이라고는 써놨지만, Request 에 담긴 내용들을 몇개 찍어서 보여준다. 리퀘스트의 경우

요런 느낌으로 모든 리퀘스트가 번호가 매겨져있다. 리퀘스트 수가 예상보다 비정상적으로 많은 경우 크롤러가 어떻게 링크를 이동하고 있는지도 이 기능을 통해서 확인할 수 있다.

 

수집한 Item 실시간 확인 및 Json 으로 Export


개인적으로는 가장 좋은 기능이라고 생각한다. 실시간으로 수집되고 있는 아이템을 확인할 수 있는데, key-value 형식으로 깔끔하게 정리해서 보여준다. 특정 key가 존재, 비어있음, 비어있지 않음 등으로 검색할 수도 있다. 랜덤하게 혹은 제일 최근 하나의 아이템을 보는 기능도 있다. 캡쳐는 가리다 보니 볼 수 있는게 없어서 아쉽게도 없다.. 

여기서 끝이 아니고, export 까지 가능하다. CSV, JSON, XML 등 3가지 종류로 가능하며, 검색 결과에 대해서 export 한다. 아무것도 검색하지 않은 상태로는 모든 데이터를 export 하고, 원하는 데이터만 추려서 뽑아낼 수 도 있다. 

만약 데이터베이스가 붙어있다면, 그다지 필요하지 않을 수 있지만 크롤링할 데이터가 많지 않고 데이터베이스도 사용하지 않는 다면 요긴하게 쓸 수 있는 기능이라고 생각한다.

 

그래서 얼만데?


자, 여기까지 보고나면 드는 생각은.. 돈이다. 당연히 서비스는 수익 모델이 있어야 하는 법. 역시 Scrapinghub도 여느 해외 웹서비스 사이트들이 그렇듯이 Plan 별로 기능을 차등해서 돈을 지불한다. 놀랍게도 위에서 이야기한 기능들은 무료 Plan도 사용할 수 있는 기본 기능이고, 결제한다면 더 강력한 기능들이 많다. 그렇지만 무조건적으로 결제를 해야하는 것은 아니고, 무료 Plan에 맞는 기능만 사용하면서도 일부 제약이 걸린채로 위와 같은 기능들을 누릴 수 있다. 

제약이라함은, 크롤러의 구동시간이다. 무료 Plan은 크롤러의 구동시간이 1시간을 초과할 수 없다. 1시간이 넘으면 5분 정도 안에 강제로 종료된다. 그런데, 크롤러를 공부하거나 경험해보고 싶은 입장에서 1시간은 충분히 큰 시간이라고 생각된다. 외부 데이터베이스와 연결된게 아니라면 충분히 얻고 싶은 데이터는 얻을 수 있는 시간이라고 생각한다.

이 제약을 없애고 싶다면, 월 $9만 결제하면 된다. 부담스럽다면, 1시간씩 끊어서해도 상관은 없다.(...)

마무리가 이상하다...

반응형