파이썬을 이용한 웹 크롤링과 스크레이핑

데이터 수집과 분석을 위한 실전 가이드

《파이썬을 이용한 웹 크롤링과 스크레이핑》은 파이썬을 이용한 데이터 수집과 분석을 위해 입문에서 실전까지 상세하게 설명한 책입니다.

기본적인 크롤링과 API를 활용한 데이터 수집은 물론, HTML과 XML 분석부터 데이터 수집 후 분석 및 머신러닝 처리에 대한 설명까지, 데이터를 수집하고 분석해서 활용할 수 있는 방법까지 확실하게 이해할 수 있도록 기초부터 차근차근 알려 줍니다.

웹 서비스 개발이나 데이터 과학 또는 머신러닝 분야에서 실무에 활용하고자 하는 사람들은 물론, 파이썬을 처음 배우는 초보자도 따라 하면서 학습할 수 있게끔 친절하게 구성했으며, 파이썬을 이용한 다양한 라이브러리와 강력한 프레임워크를 활용해 효율적인 개발이 가능하도록 도와줍니다.

이 책은 크롤링/스크레이핑과 관련된 내용을 정말 자세하게 다루는 책입니다. ‘기본적인 유닉스 명령어를 사용해 크롤링/스크레이핑하는 방법’부터 ‘파이썬 프레임워크인 Scrapy를 사용해 크롤링/스크레이핑하는 방법’까지 현재 사용되고 있는 크롤링/스크레이핑 방법을 전반적으로 다룹니다.

★ 이 책의 구성 ★

1장에서는 파이썬을 사용하지 않고, 유닉스 명령어로 간단하게 크롤링/스크레이핑하는 방법을 소개합니다. 크롤링과 스크레이핑이 무엇인지 조금은 느낄 수 있을 것입니다.

2장에서는 파이썬 표준 라이브러리만으로 크롤링/스크레이핑을 합니다. 파이썬을 사용하면 유연한 스크레이핑이 가능하다는 것을 느낄 수 있을 것입니다.

3장에서는 편리하게 사용할 수 있는 서드파티 라이브러리를 사용해 크롤링/스크레이핑합니다. 서드파티 라이브러리를 사용하면 표준 라이브러리만으로는 어려운 처리를 간단하게 할 수 있습니다.

4장에서는 실제로 웹사이트를 대상으로 크롤링/스크레이핑할 때 주의해야 할 점을 설명합니다.

5장에서는 실제 웹사이트에서 데이터를 수집하고 활용해 봅니다. 데이터 세트 또는 API로 데이터를 수집하거나 그래프로 그리거나 자연 언어를 처리하는 등의 데이터 활용에 대해서도 설명합니다.

6장에서는 강력한 크롤링/스크레이핑 프레임워크인 Scrapy를 사용해 효율적인 크롤러를 간단하게 만들어 봅니다. 또한 내용 검색 또는 얼굴 인식 등과 관련된 데이터 활용에 대해서도 설명합니다.

7장에서는 크롤러를 지속적으로 운용할 때 필요한 것들을 소개합니다. 또한 크롤링을 빠르게 할 수 있는 효율적인 방법에 대해서도 설명합니다.

카토 코타 (加藤 耕太)

파이썬과의 만남은 Django. 사용하기 쉬운 UI 만들기와 자동화를 좋아함. 간사이에 있는 시스템 통합 업체에서 근무.

윤인성

출근하는 게 싫어서 책을 집필/번역하기 시작했다. 일본어는 픽시브에서 웹 코믹을 읽다가 배웠다고 전해진다. 현재 직업 특성상 집에서 나갈 이유가 별로 없다는 것에 굉장히 만족하는 성격이기도 하다. 홍차와 커피를 좋아하며 요리, 음악, 그림, 스컬핑 등이 취미다. 『모던 웹을 위한 JavaScript+jQuery 입문』 『모던 웹을 위한 Node.js 프로그래밍』 『모던 웹 디자인을 위한 HTML5+CSS3 입문』 등을 저술하였으며, 『파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문』 『스위프트로 시작하는 아이폰 앱 개발 교과서』 『모던 웹사이트 디자인의 정석』 『유니티 게임 이펙트 입문』(이상 위키북스), 『실전 게임 제작으로 배우는 언리얼 엔진 4』 『TopCoder 알고리즘 트레이닝』 『Nature of Code』(이상 한빛미디어), 『소셜 코딩으로 이끄는 GitHub 실천 기술』(제이펍) 등을 번역했다.

  • ▣ 01장: 크롤링과 스크레이핑이란?
    • 1.1 이 책에서 다루는 영역
      • 1.1.1 크롤링과 스크레이핑
      • 1.1.2 크롤링/스크레이핑과 파이썬
      • 1.1.3 이 책에서 사용하는 플랫폼
      • 1.1.4 이 책의 구성
    • 1.2 w‍get으로 크롤링하기
      • 1.2.1 w‍get이란?
      • 1.2.2 w‍get 사용법
      • 1.2.3 실제 사이트 크롤링하기
    • 1.3 유닉스 명령어로 스크레이핑하기
      • 1.3.1 유닉스 명령어 기초 지식
      • 1.3.2 텍스트 처리와 관련된 유닉스 명령어
      • 1.3.3 정규 표현식
    • 1.4 한빛미디어의 전체 도서 목록 중에서 페이지 하나 출력하기
      • 1.4.1 도서 목록 추출하기
    • 1.5 정리
    •  
  • ▣ 02장: 파이썬으로 시작하는 크롤링/스크레이핑
    • 2.1 파이썬을 사용할 때의 장점
      • 2.1.1 언어 자체의 특성
      • 2.1.2 강력한 서드파티 라이브러리
      • 2.1.3 스크레이핑 이후 처리와의 친화성
    • 2.2 파이썬 설치와 실행
      • 2.2.1 파이썬 2와 파이썬 3
      • 2.2.2 패키지 매니저로 파이썬 3 설치하기
      • 2.2.3 가상 환경(venv) 사용하기
      • 2.2.4 인터랙티브 셸 사용
    • 2.3 파이썬 기초 지식
      • 2.3.1 스크립트 파일 실행과 구성
      • 2.3.2 기본적인 데이터 구조
      • 2.3.3 제어 구조와 함수/클래스 정의
      • 2.3.4 내장 함수
      • 2.3.5 모듈
    • 2.4 웹 페이지 추출하기
      • 2.4.1 urllib으로 웹 페이지 추출하기
      • 2.4.2 문자 코드 다루기
    • 2.5 웹 페이지에서 데이터 추출하기
      • 2.5.1 정규 표현식으로 스크레이핑하기
      • 2.5.2 XML(RSS) 스크레이핑
    • 2.6 데이터 저장하기
      • 2.6.1 CSV 형식으로 저장하기
      • 2.6.2 JSON 형식으로 저장하기
      • 2.6.3 데이터베이스(SQLite3)에 저장하기
    • 2.7 파이썬으로 스크레이핑하는 흐름
    • 2.8 정리
    •  
  • ▣ 03장: 주요 라이브러리 활용
    • 3.1 라이브러리 설치
      • 3.1.1 pip으로 설치하기
    • 3.2 웹 페이지 간단하게 추출하기
    • 3.3 HTML 스크레이핑
      • 3.3.1 XPath와 CSS 선택자
      • 3.3.2 lxml로 스크레이핑하기
      • 3.3.3 Beautiful Soup로 스크레이핑하기
    • 3.4 RSS 스크레이핑하기
    • 3.5 데이터베이스에 저장하기
      • 3.5.1 MySQL에 데이터 저장하기
      • 3.5.2 MongoDB에 데이터 저장하기
    • 3.6 크롤러와 URL
      • 3.6.1 URL 기초 기식
      • 3.6.2 퍼머링크와 링크 구조 패턴
      • 3.6.3 재실행을 고려한 데이터 설계
    • 3.7 파이썬으로 크롤러 만들기
      • 3.7.1 목록 페이지에서 퍼머 링크 목록 추출하기
      • 3.7.2 상세 페이지에서 스크레이핑하기
      • 3.7.3 상세 페이지 크롤링하기
      • 3.7.4 스크레이핑한 데이터 저장하기
    • 3.8 정리
    •  
  • ▣ 04장: 크롤러를 사용할 때 기억해야 하는 것
    • 4.1 크롤러 분류하기
      • 4.1.1 상태를 가지는 지로 분류하기
      • 4.1.2 자바스크립트를 실행할 수 있는지로 분류하기
      • 4.1.3 불특정 다수의 사이트를 대상하고 있는지로 분류하기
    • 4.2 크롤러를 만들 때 주의해야 하는 것
      • 4.2.2 robots.txt로 크롤러에게 지시하기
      • 4.2.3 XML 사이트맵
      • 4.2.4 크롤링 대상에 대한 부하
      • 4.2.5 연락처 명시하기
      • 4.2.6 상태 코드와 오류 처리
    • 4.3 여러 번 사용을 전제로 설계하기
      • 4.3.1 변경된 데이터만 추출하기
    • 4.4 크롤링 대상의 변화에 대응하기
      • 4.4.1 변화 감지하기
      • 4.4.2 변화 통지하기
    • 4.5 정리
    •  
  • ▣ 05장: 크롤링/스크레이핑 실전과 데이터 활용
    • 5.1 데이터 세트 추출과 활용
      • 5.1.1 위키백과 데이터 세트 다운로드하기
      • 5.1.2 자연어 처리를 사용한 빈출 단어 추출
    • 5.2 API로 데이터 수집하고 활용하기
      • 5.2.1 트위터에서 데이터 수집하기
      • 5.2.2 유튜브에서 동영상 정보 수집하기
    • 5.3 시계열 데이터 수집하고 활용하기
      • 5.3.1 환율 데이터 수집
      • 5.3.2 pandas와 CSV 파일
      • 5.3.3 그래프로 시각화하기
    • 5.4 열린 데이터 수집과 활용
      • 5.4.1 열린 데이터란?
      • 5.4.2 PDF에서 데이터 추출하기
      • 5.4.3 Linked Open Data를 기반으로 데이터 수집하기
    • 5.5 웹 페이지 자동 조작
      • 5.5.1 자동 조작 구현 방법
      • 5.5.2 네이버페이 주문 이력 추출하기
    • 5.6 자바스크립트를 이용한 페이지 스크레이핑
      • 5.6.1 자바스크립트를 사용한 페이지에 대한 대응 방법
      • 5.6.2 PhantomJS 활용하기
      • 5.6.3 RSS 피드 생성하기
    • 5.7 추출한 데이터 활용하기
      • 5.7.1 지도로 시각화하기
      • 5.7.2 BigQuery로 해석하기
    • 5.8 정리
    •  
  • ▣ 06장: Scrapy 프레임워크
    • 6.1 Scrapy 개요
      • 6.1.1 Scrapy 설치
      • 6.1.2 Spider 실행하기
    • 6.2 Spider 만들고 실행하기
      • 6.2.1 Scrapy 프로젝트 만들기
      • 6.2.2 Item 만들기
      • 6.2.3 Spider 만들기
      • 6.2.4 Scrapy Shell로 인터랙티브하게 스크레이핑하기
      • 6.2.5 Spider 실행하기
    • 6.3 실전적인 크롤링
      • 6.3.1 크롤링으로 링크 순회하기
      • 6.3.2 XML 사이트맵을 사용해 크롤링하기
    • 6.4 추출한 데이터 처리하기
      • 6.4.1 Item Pipeline 개요
      • 6.4.2 데이터 검증
      • 6.4.3 MongoDB에 데이터 저장하기
      • 6.4.4 MySQL에 데이터 저장하기
    • 6.5 Scrapy 설정
      • 6.5.1 설정 방법
      • 6.5.2 크롤링 대상에 폐를 끼치지 않기 위한 설정 항목
      • 6.5.3 병렬 처리와 관련된 설정 항목
      • 6.5.4 HTTP 요청과 관련된 설정
      • 6.5.5 HTTP 캐시 설정 항목
      • 6.5.6 오류 처리와 관련된 설정
      • 6.5.7 프락시 사용하기
    • 6.6 Scrapy 확장하기
      • 6.6.1 다운로드 처리 확장하기
      • 6.6.2 Spider의 동작 확장하기
    • 6.7 크롤링으로 데이터 수집하고 활용하기
      • 6.7.1 음식점 정보 수집
      • 6.7.2 불특정 다수의 웹사이트 크롤링하기
    • 6.8 이미지 수집과 활용
      • 6.8.1 플리커에서 이미지 수집하기
      • 6.8.2 OpenCV로 얼굴 이미지 추출하기
    • 6.9 정리
    •  
  • ▣ 07장: 크롤러의 지속적 운용과 관리
    • 7.1 크롤러를 서버에서 실행하기
      • 7.1.1 가상 서버 만들기
      • 7.1.2 서버에 디플로이하기
    • 7.2 크롤러를 정기적으로 실행하기
      • 7.2.1 Cron 설정
      • 7.2.2 오류 통지
    • 7.3 크롤링과 스크레이핑 분리하기
      • 7.3.1 메시지 큐 RQ 사용 방법
      • 7.3.2 메시지 큐로 연동하기
      • 7.3.3 메시지 큐 운용하기
    • 7.4 크롤링 성능 향상과 비동기 처리
      • 7.4.1 멀티 스레드와 멀티 프로세스
      • 7.4.2 비동기 I/O를 사용해 효율적으로 크롤링하기
    • 7.5 클라우드 활용하기
      • 7.5.1 클라우드의 장점
      • 7.5.2 AWS SDK 사용하기
      • 7.5.3 클라우드 스토리지 사용하기
    • 7.6 정리
    •  
  • ▣ 부록: 베이그런트로 개발 환경 구축하기
    • A.1 버추얼박스와 베이그런트
      • A.1.1 버추얼박스란?
      • A.1.2 베이그런트란?
    • A.2 CPU 가상화 지원 기능 활성화하기
      • A.2.1 윈도우 10의 경우
      • A.2.2 윈도우 7의 경우
      • A.2.3 펌웨어 설정으로 가상화 지원 기능 활성화하기
    • A.3 버추얼박스 설치하기
    • A.4 베이그런트 설치하기
    • A.5 가상 머신 실행하기
    • A.6 게스트 OS에 SSH 접속하기
      • A.6.1 Tera Term 설치
      • A.6.2 Tera Term으로 게스트 OS에 SSH로 접속하기
    • A.7 리눅스 기본 조작
      • A.7.1 소프트웨어 설치하기
    • A.8 베이그런트의 가상 머신 조작 명령어
      • A.8.1 가상 머신 실행하기(vagrant up)
      • A.8.2 가상 머신 종료/재실행하기(vagrant halt/reload)
      • A.8.3 가상 머신 제거하기(vagrant destroy)
      • A.8.4 가상 머신 상태 출력하기(vagrant status)
      • A.8.5 가상 머신에 SSH로 접속하기(vagrant ssh)
      • A.8.6 가상 머신 익스포트하기(vagrant package)
  • 68쪽, 본문 밑에서 3번째 줄

    indexnt=2로 지정하면

    ==>

    indent=2로 지정하면

  • 159쪽, 하단 예제

    $ python konlpy-basic.py
    

    ==>

    $ python konlpy-sample.py
    
  • 199쪽, 상단 예제의 8번째 줄

    plt.subplot(2, 1, 2) # 3 1 の3 のサフフロットを 。
    

    ==>

    plt.subplot(2, 1, 2)
    
  • 269쪽, 예제 6.1의 13번째 줄

    for url in response.css('ul li a::attr("href")').re('.*/category/.*'):
    

    ==>

    for url in response.css('ul li a::attr("href")').re('.*/tag/.*'):
    
  • 269쪽, 예제 6.1의 20번째 줄

    for post_title in response.css('div.entries > ul > li a::text').extract():
    

    ==>

    for post_title in response.css('div.post-header > h2 > a::text').extract():
    
  • 385쪽, scrape_detail_page 함수 본문의 6번째 줄

    'url': response.url, 
    

    ==>

    'url': url,
    
  • 404쪽, 8번째 줄

    힘든 경우에는 Apache Nutch25처럼

    ==>

    힘든 경우에는 Apache Nutch(http://nutch.apache.org/)처럼

  • 424쪽, 밑에서 2번째 줄

    패스프레이즈 ==> 패스워드