크롤링 핵심 가이드

웹 사이트 크롤링을 위한 실전 테크닉


  • 타케조에 나오키, 시마모토 타카코, 타도코로 슌스케, 하기노 타카히로, 카와카미 모모코 지음
  • 윤인성 옮김

  • 데이터 사이언스 시리즈_017
  • ISBN: 9791158391072
  • 22,000원 | 2018년 07월 17일 발행 | 294쪽



웹 애플리케이션, 웹 서비스를 개발/운용하는 엔지니어라면, HTML/HTTP와 웹 서버 등의 웹 기술과 관련된 기초 지식을 알고 있어야 한다. 이 책에서는 실제 서비스에서 대규모 웹 크롤러를 개발/운용해 본 경험을 기반으로, 크롤러를 지탱하는 HTTP, 문자 코드, HTML, 인증, Ajax/JSON 등 웹 엔지니어가 꼭 기억해야 하는 포인트와 테크닉을 설명한다. 크롤러의 입장에서 보는 웹 사이트의 구조와 그 실정에 맞는, 실용적이고 효율적인 크롤링 방법을 설명한다.

  • 실제 예를 바탕으로 HTTP, HTML 등의 웹과 관련된 내용을 깊게 알 수 있다.
  • 대규모 크롤러를 개발/운용하는 노하우를 알 수 있다.
  • 웹 사이트 운영자(크롤링 당하는 입장)도 크롤러와 관련된 지식을 얻을 수 있다.

타케조에 나오키 (竹添 直樹)

주식회사 비즈 리치 소속의 Scala를 사랑하는 프로그래머이다. 업무와 함께 OSS 활동, 서적 집필 등을 하고 있다. GitBucket, Apache PredictionIO, Scalatra 등의 커미터도 맡고 있다.

시마모토 타카코 (島本 多可子)

주식회사 비즈 리치에 근무 중이다. 최근 몇 년 동안 "Scala", "오픈소스"를 키워드로 웹 애플리케이션 개발을 했지만, 최근에는 Apache Spark Streaming과 AWS Kinesis와 관련된 일을 하고 있다. 오픈소스 GitHub 클론인 "GitBucket" 개발에도 참여했다.

타도코로 슌스케 (田所 駿佑)

주식회사 비즈 리치 소속의 Scala 엔지니어이다. 구인 검색 엔진 "스탠바이"를 만들면서, 문자 깨짐과 관련된 많은 일을 접한 뒤, 그림 문자에 매력을 느끼게 되었다. Scala 그림 문자 라이브러리 개발, 그림 문자와 관련된 국제적인 컨퍼런스에 참가하는 등 아마추어 그림 문자 연구가로서 웹 엔지니어의 길을 순조롭게 걷고 있다.

하기노 타카히로 (萩野 貴拓)

주식회사 비즈 리치 소속의 AI 연구실 소속이다. 구인 검색 엔진 "스탠바이"의 크롤러 운용, 검색 품질 최적화, 데이터 마이닝 등을 담당한 후, 현재는 머신러닝 시스템 기반 구축과 관련된 일을 하고 있다. 오픈 소스 머신러닝 서버 Apache PredictionIO의 커미터이며, Apache Prediction IO가 널리 사용될 수 있게 홍보하고 있다.

카와카미 모모코 (川上 桃子)

주식회사 비즈 리치 소속의 스탠바이 사업부에서 업무 위탁 받아 근무하고 있다. 구인 검색 엔진 "스탠바이"의 크롤링 개발, 유지 보수를 담당하고 있다. 매일 다양한 구인 사이트를 크롤링하기 위해 분투하고 있다.

윤인성

홍차와 커피를 좋아하며 요리, 음악, 그림, 스컬핑 등이 취미다. 『모던 웹을 위한 JavaScript+jQuery 입문』 『모던 웹을 위한 Node.js 프로그래밍』 『모던 웹 디자인을 위한 HTML5+CSS3 입문』 등을 저술하였으며, 『파이썬을 이용한 웹 크롤링과 스크레이핑』 『모던 자바스크립트 개발자를 위한 리액트 프로그래밍』 『최신 표준 HTML5+CSS3 디자인』 『파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문』 『스위프트로 시작하는 아이폰 앱 개발 교과서』 『유니티 게임 이펙트 입문』 『모던 웹사이트 디자인의 정석』(이상 위키북스), 『실전 게임 제작으로 배우는 언리얼 엔진 4』 『TopCoder 알고리즘 트레이닝』 『Nature of Code』(이상 한빛미디어), 『소셜 코딩으로 이끄는 GitHub 실천 기술』(제이펍) 등을 번역했다.

  • ▣ 1장: 크롤러를 지탱하는 기술
    • 1-1 크롤러란?
    • 1-2 크롤러의 구조
      • 크롤링
      • 스크레이핑
    • 1-3 크롤러와 웹 기술
      • 데이터 저장하기
      • 웹 크롤러가 지켜야 하는 규칙
      • 크롤러가 직면한 과제
    • 1-4 크롤러 만들어보기
      • Java로 간단한 크롤러 구현하기
      • 크롤링/스크레이핑 전용 서비스와 도구
    • 1-5 개발을 지원하는 도구
      • curl
      • 브라우저의 개발자 도구
    •  
  • ▣ 2장: HTTP 이해하기
    • 2-1 HTTP 개요
      • HTTP 통신 내용 보기
    • 2-2 HTTP 메서드 사용 구분하기
      • 일부 메서드가 지원되지 않는 경우
      • 메서드의 사용 방법이 적절하지 않은 경우
      • URL 인코드 방식의 차이에 따른 문제
    • 2-3 믿을 수 없는 응답 상태
      • 상태 코드에 따라 적절히 처리하기
      • 오류가 발생했는데도 200을 응답하는 경우
      • 페이지가 존재하지 않는 경우의 리다이렉트
      • 서버에 접속할 수 없는 경우
      • 서버 오류가 발생했을 경우의 일반적인 대처 방법
      • 리다이렉트의 미묘한 의미 차이
    • 2-4 HTTP 헤더 조정하기
      • 크롤러의 사용자 에이전트
      • 쿠키가 없으면 크롤링할 수 없는 웹 사이트
      • 국제화를 지원하는 웹 사이트 크롤링하기
    • 2-5 프록시 서버를 경유해서 크롤링하기
      • 프록시 사용 시 HTTP 통신 내용 확인하기
      • 크롤러에서 프록시 사용하기
    • 2-6 SSL 통신 때 발생하는 오류
      • SSL 버전
      • SSL 지원 사이트 크롤링하기
      • 자바의 AES 키 길이 문제
    • 2-7 HTTP/2
      • 자바로 HTTP/2 다루기
    • 2-8 정리
    •  
  • ▣ 3장: 문자 깨짐 해결하기
    • 3-1 크롤링과 문자 코드
    • 3-2 왜 문자가 깨질까?
      • 컴퓨터와 문자
      • 문자 깨짐과 멀티 바이트 문자
    • 3-3 클라이언트와 서버 간의 문자 깨짐
      • 문자 깨짐이 일어나는 위치
      • 애플리케이션과 데이터베이스
      • 텍스트 파일 읽고 쓰기
    • 3-4 적절하게 문자 코드 다루기
      • 크롤링과 문자 코드
      • 인덱싱과 문자 코드
    • 3-5 대표적인 문자 코드
      • UTF-8
      • EUC-KR
    • 3-6 문자 코드와 관련해 발생할 수 있는 함정
      • 문자 코드 믿지 말기
      • 데이터베이스와 초밥① - 사라진 초밥 문제
      • 데이터베이스와 초밥② - 그림 문자 검색 문제
      • 트러블 슈팅을 위한 팁
    • 3-7 문자 코드 추정하기
      • juniversalchardet
      • ICU4J
      • 자바 외 언어의 라이브러리
    • 3-8 정리
    •  
  • ▣ 4장: 스크레이핑 테크닉
    • 4-1 HTML에서 데이터 추출하기
      • 정규 표현식
      • XPath
      • CSS 선택자
      • HTML 이외의 데이터
    • 4-2 CSS 선택자 사용하기
      • 지정한 위치의 요소 추출하기 - nth-child()
      • 텍스트 노드를 문자열로 검색하기 - contains()
      • 텍스트 노드를 정규 표현식으로 검색하기 - matched()
      • 자식 요소를 제외하고 검색하기 - containsOwn()과 matchesOwn()
      • 속성으로 검색하기
    • 4-3 스크레이핑한 데이터 가공하기
      • [예1] alt 속성에서 데이터 추출하기
      • [예2] 주소 추출하기
      • 웹 페이지의 메타 데이터
    • 4-4 메타 데이터 활용하기
      • 구조화 마크업
    • 4-5 정리
    •  
  • ▣ 5장: 인증하기
    • 5-1 인증이 필요한 페이지를 크롤링하는 이유
      • 인증이 필요한 웹 사이트를 크롤링할 때 지켜야 할 사항
    • 5-2 다양한 인증 방식과 크롤링 방법
      • HTTP 인증
      • 입력 양식 기반 인증
      • 2단계 인증
      • CAPTCHA를 사용한 BOT 대책
    • 5-3 웹 API를 사용해 정보 추출하기
      • 접근키로 인증하기
      • OAuth 2.0
      • 인증과 허가
      • pac4j를 사용해 GitHub OAuth 사용해 보기
    • 5-4 정리
    •  
  • ▣ 6장: 크롤링 응용 테크닉
    • 6-1 크롤러가 지켜야 하는 매너
      • 요청 수와 요청 간격 제한
      • 크롤링 제한하기
    • 6-2 필요한 페이지만 크롤링하기
      • 페이징
      • 의외로 잘 사용하지 않는 사이트맵 XML
      • RSS 또는 Atom을 기반으로 사이트의 변경 정보 추출하기
      • 콘텐츠를 캐시해서 통신 줄이기
      • gzip 압축으로 응답 빠르게 만들기
    • 6-3 제거된 콘텐츠 판정하기
      • 콘텐츠에 명시적으로 적혀 있는 기간 사용하기
      • 대상 사이트를 정기적으로 크롤링하기
      • 인덱스한 URL을 정기적으로 확인하기
      • 목록 페이지에 URL이 존재하지 않는 경우 삭제된 것으로 판정하기
      • 남은 문제
    • 6-4 웹 사이트의 변경 시점 및 변경 빈도 학습하기
      • 명시된 변경일 찾기
      • 오류
      • 변경 빈도에 따라 크롤링 빈도 조정하기
      • 크롤링 소요 시간을 기반으로 크롤러의 리소스 사용량 조절하기
    • 6-5 가장 효율적인 방법 = 크롤링하지 않기
    • 6-6 정리
    •  
  • ▣ 7장: 자바스크립트 가지고 놀기
    • 7-1 Ajax와 SPA
      • 자바스크립트를 사용한 웹 페이지의 예
      • 크롤러의 관점에서 살펴본 자바스크립트
    • 7-2 자바스크립트와의 싸움 피하기
      • 자바스크립트의 동작 재현하기
      • 크롤러를 위한 정보 찾기
      • 모바일 사이트
    • 7-3 브라우저 조작과 도구 활용하기
      • Selenium WebDriver 사용해 보기
    • 7-4 정리