2016년 동안 활동했던 한빛출판네트워크 한빛리더스(전문서 그룹) 3기 활동이 이제 마무리 되어간다. 이번에 담당했던 마지막 책은 "파이썬으로 웹 크롤러 만들기"였다. 

원서에서는 스크래이핑(scraping)이라는 표현을 쓰고 있지만, 번역자 분께서는 아무래도 한국에서 더 널리 쓰이고 있는 크롤러(crawler)라는 단어를 채택하신 것 같다. 결국 핵심은 웹 페이지를 탐색하여 가져와서 자동으로 데이터를 추출해 내는 행위를 뜻한다. 사실 나의 지난 블로그 포스팅 ([Python] 웹 크롤링 및 텍스트 파싱을 이용한 성경 다운로더)를 통해서 웹 크롤러를 작성해본 적이 있기 때문에 이 책의 내용이 별로 대단한건 없을거라고 생각했는데 큰 오산이었다. 내가 사용했던 방법은 정말로 초보자 수준이었고, 함수들을 제대로 몰라서 노가다를 뛴 측면이 많았다. 이 책에서는 다양한 API와 정규표현식을 사용하여 보다 Elegance한 방법을 제시하고 있다.


이 책의 저자는 상당히 완벽주의적 성격으로 보인다. 특히 이 책에서 사용되는 각종 라이브러리에 대한 구체적인 설치 방법을 제시함과 동시에, 책이 Python 3 기준으로 서술되어 있으므로 Python2와 어떻게 다른 차별성을 가지고 있는지, 3용 패키지를 지원하는지 안하는지를 정말 상세하게 설명해준다. 역시나 향후에는 Python2가 단종수순으로 가기 때문에 실무쪽에서도 슬슬 준비를 해야할 것 같다.


저자는 단순히 프로그램 개발만 잘하는 것이 아니라 데이터베이스 관리, 자연어 처리, 성능 튜닝, 보안 등등 다양한 관점을 겸비한 전문가로 보인다. 특히 온라인의 폼(Form)과 로그인 인증을 우회하거나 CAPTCHA를 뚫는 것은 정보보안적 관점에서도 중요한 위협(또는 방어)가 될 수 있기 때문에 저자는 이러한 취약점에 대해서도 상세히 설명하고 있다. 이는 자연스럽게 법적인 문제를 야기할수도 있는데, 사실 크롤링 행위 자체에 대해서는 불법이 아니라고 하지만 이것이 과하여 상대방의 웹사이트를 다운시킬 정도가 된다면 이것은 윤리적으로 모호한 상황이 아니다, 그것은 명백히 잘못된 일이므로 항상 주의를 기울여야 한다. 책의 부록에는 이와 관련된 법적공방 판례와 '컴퓨터 사기와 악용에 관한 법률(United States v. Auernheimer and The Computer Fraud and Abuse Act)'을 다루고 있다. 더불어서, 상대의 컴퓨터 뿐만 아니라 나의 컴퓨터도 지키기 위해서는 성능 이슈를 잘 관리하여야 한다고 지적한다. 이를 위해서는 적절한 쓰레드 처리로 부하를 분산하는 등의 방법이 요구된다(270page참조). unittest, 셀레니움 등을 사용하여 테스팅을 해보는 것도 좋다.


특히 인상깊었던 점은, Chapter 8의 자연어 처리 부분이다. 솔직히 이 부분은 웹 크롤링 책에서 전혀 기대하지 않았던 내용인데ㅡ 자연어 처리의 핵심내용을 거의 대부분 소개해주었기에 파이썬 NLTK 를 조금이나마 쉽게 이해할 수 있었다. 더욱 자세한 내용은 제임스 푸스테요프스키와 앰버 스텁스의 Natural Language Processing with Python을 참고하는 것이 좋다고 한다.

한빛출판의 장인정신은 정말 책 한권한권에 묻어난다. 역자들은 단순히 언어만 번역하는 것이 아니라 책에 언급된 모든 라이브러리들을 직접 설치해보고 구동해본다. 그리고 특이사항이 발생할 경우 '역자주'로 하단부에 친절히 명시하고 있다. 이러한 노력 덕분에 독자들의 책에 대한 신뢰도는 무한히 상승한다.

약~간 아쉬웠던 점이 있다면 책의 저자인 Ryan Mitchell이 끊임없는 개드립..과 아재개그(?)를 날리는데, 이런 부분은 문화적 차이 때문에 잘 전달되지 않는다는 점이다. ㅋㅋㅋ 예를 들어 207page에서 "Arial"이란 단어를 잘못 추출하면 "Anal"이 되고 만다. 그것은 r, i 를 n 한글자로 인식한 탓이다. 라고 설명하고 있는데, 알다시피.. Anal은.. 항문(肛門)을 의도한 다분함이 보이지만 ㅋㅋㅋㅋ 아무래도 번역체에서는 그냥 지나쳐버릴 수 있어서 아쉽다. 그 외에도 '월드 오브 워크래프트' 하시는 분을 찾지않나.. 아마 저자는 나름 쓰면서 웃기다고 생각되어 키득키득 했을 것이다.ㅋ


이 책의 마지막 단원인 '미래를 향해(Moving Forward)'는 웹 크롤링 프로젝트에서 다음과 같은 가이드라인을 제시한다.

  • 지금 내가 처한 문제는 무엇인가?
  • 어떤 데이터가 문제 해결에 도움이 되고, 어디에서 그걸 찾을 수 있나?
  • 웹사이트는 이 데이터를 어떻게 표시하나? 웹사이트의 코드 어느 부분에 이 정보가 들어 있는지 정확히 파악할 수 있나?
  • 데이터를 어떻게 정확히 찾아서 가져올 수 있을까?
  • 데이터를 더 유용하게 만들려면 어떻게 처리되고 분석해야 할까?
  • 이 방식을 더 좋게, 더 빠르게, 더 견고하게 개선하려면 어떻게 해야 할까?


결론적으로 이 책을 요약하자면, 인터넷이라는 거대한 밀림 속에서, 내가 원하는 자료를 찾기 위해 온갖 이미지를 다운로드하고 그 중 글자를 추출하고 가공하여 데이터베이스에 저장하는 등 일련의 과정을 거쳐서 다양한 문제들을 해결할 수있다는 것을 말한다. 물론 숙련을 위해서는 많은 연습과 시간이 필요할 것이다. 그렇지만 이 책 덕분에 참 다양한 인사이트를 얻었다. 내가 관심있는 주제를 하나 선정하여 크롤러 프로젝트를 한번 수행해봐야 겠다.


http://www.hanbit.co.kr/store/books/look.php?p_code=B7159663510

CPUU님의 창작활동을 응원하고 싶으세요?