파이썬 명령어 PDF - paisseon myeonglyeong-eo PDF

Python pdf text 읽기

파이썬으로 pdf 파일에서 텍스트를 추출해내는 방법에 대하여 다루어보도록 하겠습니다.

여기에는 매우 다양한 방법이 있지만 여기서는 간편한 방법 예시 2가지로 pypdf2 모듈과

tika 모듈을 활용한 예제를 살펴보겠습니다.

이 두 모듈이 설치되어 있지않다면 먼저 아래 명령어로 사용할 모듈을 설치해주세요.

!pip install pypdf2

!pip install tika

아래의 매우 간단한 텍스트 두 줄이 있는 pdf_1.pdf파일을 예시로 설명하겠습니다.

파이썬 명령어 PDF - paisseon myeonglyeong-eo PDF

pypdf2 모듈 활용 방법

먼저, PdfFileReader를 활용하여 아래의 형식으로

파일 디렉토리와 읽기 모드(rb) 부분을 지정해줍니다.

from PyPDF2 import PdfFileReader

pdf1 = PdfFileReader(open("pdf_1.pdf", 'rb')) # 디렉토리 주의

이제 위에서 선언한 변수를 가지고 다음 코드처럼 파싱을 진행해주시면 됩니다.

(n 페이지 부분의 내용을 가져오려면 pages에 대한 인덱스를 n-1로 설정해주세요.)

# 1 페이지의 내용을 가져오는 경우(pages[1], pages[2], ...는 2, 3, ... 페이지 의미)
pdf1.pages[0].extractText().split('\n')

위의 코드 실행 결과, 아래처럼 한 줄의 텍스트씩 리스트에 담겨진 결과를 받을 수 있습니다.

['1번 파일입니다 .', '@@@ 1번 파일 내용 @@@']

tika 모듈 활용 방법

여기서는 tika 모듈 내의 parser 메소드로 pdf 파일을 읽어오면 되는데,

pypdf2에서와는 달리 input으로 파일의 디렉토리만 지정해주시면 됩니다.

from tika import parser

pdf1 = parser.from_file("pdf_1.pdf") # 디렉토리 주의

위에서 읽어들인 변수 내에는 다양한 값들이 딕셔너리와 비슷한 형태로 저장되어 있는데,

이 중 content 인자 내에 읽어들일 텍스트가 들어있습니다.

한 줄의 내용씩 리스트의 원소로 가져오기 위해서는 아래처럼 코드를 작성해주시면 됩니다.

pdf1['content'].strip().split('\n')

실행 결과는 다음과 같은데 여러 페이지의 내용이 전부 모아져서 추출된다는 특징이 있으며,

pypdf2를 사용한 경우와 미세한 결과 차이가 있을 수 있습니다.

(해당 예제에서는 첫 줄의 콤마 이전에 공백의 여부가 다릅니다.)

['1번 파일입니다.', '@@@ 1번 파일 내용 @@@']

새로운 패키지만으로도 해볼 수 있는 작은 프로젝트들입니다. 파이썬은 실무에서 대규모 애플리케이션을 만드는 일보다는 유틸리티 성격의 프로젝트를 자주 만드는 편입니다(실제 필자도 경험했습니다). 이러한 경험을 바탕으로 비교적 쉽게 시작할 수 있는 예제들을 소개합니다. 예제 구성은 다음과 같습니다.9장에서는 스크래피라는 파이썬 프레임워크로 웹 페이지의 원하는 데이터를 크롤링하는 간단한 크롤러를 만듭니다. 이를 읽고 나면 다양한 크롤러를 만드는 기본을 익힐 것입니다.10장에서는 초소형 데이터베이스인 SQLite를 파이썬에서 다루는 방법을 배웁니다. 해당 부분을 익히면 다른 데이터베이스를 파이썬에서 다룰 때도 큰 어려움이 없을 겁니다.11장에서는 파이썬의 대표적인 웹 프레임워크인 플라스크로 API 서버를 만들어봅니다. 앞으로 가벼운 웹 API를 배포해야 할 때 큰 도움이 될 것입니다. 5 12장에서는 최근 커뮤니케이션 도구로 많은 관심을 받는 슬랙에서 원하는 데이터를 보내는 봇을 만들 것입니다. 특정 형식의 데이터를 입력하면 결과를 내는 주사위 봇을 만드는 과정과 봇으로 정기적인 작업을 실행하는 방법을 살펴봅니다.13장에서는 RabbitMQ 기반의 메시지 큐 다루기를 소개합니다. 또한 셀러리라는 파이썬 패키지로 메시지 큐를 분산 처리하는 방법도 살펴봅니다.14장에서는 파이썬의 대표적인 데이터 분석 도구인 팬더스의 기본 사용 방법을 익혀봅니다.팬더스의 두 가지 중요한 데이터 타입을 살펴보고 데이터를 가져오고 저장하는 방법부터 데이터 분석과 그래프 만들기 작업까지 해볼 것입니다.15장은 네이버와 카카오에서 제공하는 Open API를 다루는 방법을 배웁니다. 먼저 OpenAPI의 기본 사용 방법을 살펴보고 3개 사이트의 Open API를 조합하는 매시업 API 서버를만들어볼 것입니다.이 책을 읽는 방법이 책은 완전 초보를 대상으로 하지 않으므로 cron 사용법, 터미널 사용법, macOS나 우분투의 기본적인 개발 환경 설정 방법 등은 이미 알 것이라 전제하고 설명하지 않습니다. 해당 부분을 잘 모르는 사람이라면 이미 출간된 리눅스 입문서나 터미널 명령어 사전을 읽기 바랍니다.또한 대부분의 예제 코드는 윈도우에서 실행할 수 없는 건 아니지만 macOS나 리눅스에서 실행하는 편이 좋습니다.이미 어느 정도 파이썬을 아는 독자라면, 1부를 건너뛰고 바로 2부만 보아도 좋을 것입니다.파이썬을 배웠는데 어떻게 써먹어야 할지 모르겠다는 분이라면 더더욱 그렇습니다. 지금 자기일에 이 책에서 소개하는 파이썬 예제가 필요한 분이라면 이 책과 다른 파이썬 입문서 한 권을함께 보길 권합니다. 아마 적어도 초보는 확실하게 벗어날 수 있을 것입니다.6 CONTENTS 지은이의 말 �������������������������������������������������������������������������������������������������������������������������� 4 서문 ������������������������������������������������������������������������������������������������������������������������������������ 5IPART 빠르게 살펴보는 파이썬 기초CHAPTER 1 파이썬 프로그래밍 준비와 시작 1.1 파이썬의 역사 �������������������������������������������������������������������������������������������������������������� 19 1.2 파이썬을 익히면 좋은 점 ����������������������������������������������������������������������������������������������� 20 1.3 파이썬 활용이 활발한 개발 분야 ������������������������������������������������������������������������������������� 21 1.3.1 웹 애플리케이션 개발 ������������������������������������������������������������������������������������������ 21 1.3.2 크롤링 ��������������������������������������������������������������������������������������������������������������� 22 1.3.3 데이터 과학과 인공지능 개발 �������������������������������������������������������������������������������� 23 1.4 파이썬 개발 환경 설치 �������������������������������������������������������������������������������������������������� 27 1.4.1 우분투 ��������������������������������������������������������������������������������������������������������������� 27 1.4.2 macOS ������������������������������������������������������������������������������������������������������������� 28 1.4.3 윈도우 ��������������������������������������������������������������������������������������������������������������� 31 1.5 조금은 어려운 Hello World ������������������������������������������������������������������������������������������� 33 1.5.1 입력과 출력 �������������������������������������������������������������������������������������������������������� 33CHAPTER 2 파이썬의 주요 특징 2.1 파이썬 코드가 말하는 파이썬의 특징 ������������������������������������������������������������������������������ 37 2.2 들여쓰기 ��������������������������������������������������������������������������������������������������������������������� 39 7 CONTENTS 2.3 세미콜론 없음 �������������������������������������������������������������������������������������������������������������� 42 2.4 인터랙티브 인터프리터 ������������������������������������������������������������������������������������������������� 42 2.5 py 파일 실행 ��������������������������������������������������������������������������������������������������������������� 43 2.6 py 파일 인코딩 ������������������������������������������������������������������������������������������������������������ 44 2.7 Pythonic way ������������������������������������������������������������������������������������������������������������� 46 2.8 파이썬 2와 파이썬 3의 차이점 ��������������������������������������������������������������������������������������� 47CHAPTER 3 데이터 타입과 기본 연산자 3.1 변수 선언 �������������������������������������������������������������������������������������������������������������������� 49 3.2 정수 ��������������������������������������������������������������������������������������������������������������������������� 50 3.3 실수 ��������������������������������������������������������������������������������������������������������������������������� 51 3.4 정수와 실수 연산 ���������������������������������������������������������������������������������������������������������� 52 3.5 문자열 ������������������������������������������������������������������������������������������������������������������������ 55 3.5.1 기본적인 선언과 사용 ������������������������������������������������������������������������������������������ 55 3.5.2 raw 문자열 표현법 ���������������������������������������������������������������������������������������������� 56 3.5.3 멀티라인 문자열 표현법 ��������������������������������������������������������������������������������������� 57 3.6 문자열의 연산 �������������������������������������������������������������������������������������������������������������� 58 3.7 리스트 ������������������������������������������������������������������������������������������������������������������������ 59 3.7.1 리스트 연산 �������������������������������������������������������������������������������������������������������� 61 3.7.2 리스트 아이템에 접근하기 ������������������������������������������������������������������������������������ 62 3.7.3 문자열을 리스트처럼 다루기 ��������������������������������������������������������������������������������� 63 3.8 딕셔너리 ��������������������������������������������������������������������������������������������������������������������� 64 3.9 집합 ��������������������������������������������������������������������������������������������������������������������������� 66 3.10 튜플 ������������������������������������������������������������������������������������������������������������������������� 678 CHAPTER 4 흐름 제어와 예외 처리 4.1 if 문 ���������������������������������������������������������������������������������������������������������������������������� 69 4.1.1 else 문 �������������������������������������������������������������������������������������������������������������� 71 4.1.2 elif 문 ���������������������������������������������������������������������������������������������������������������� 73 4.2 and, or, not ���������������������������������������������������������������������������������������������������������������� 74 4.2.1 리스트, 딕셔너리, 집합, 튜플과 함께 사용하는 in ����������������������������������������������������� 76 4.3 while 문 ���������������������������������������������������������������������������������������������������������������������� 77 4.4 for 문 ������������������������������������������������������������������������������������������������������������������������� 78 4.4.1 리스트 및 딕셔너리와 함께 for 문 사용하기 ������������������������������������������������������������ 80 4.4.2 range( ) 함수와 함께 사용하기 ����������������������������������������������������������������������������� 81 4.5 break ������������������������������������������������������������������������������������������������������������������������� 83 4.6 continue �������������������������������������������������������������������������������������������������������������������� 83 4.6.1 else ������������������������������������������������������������������������������������������������������������������� 84 4.7 pass �������������������������������������������������������������������������������������������������������������������������� 86CHAPTER 5 함수와 람다 5.1 함수 ��������������������������������������������������������������������������������������������������������������������������� 87 5.1.1 타입 힌팅 ����������������������������������������������������������������������������������������������������������� 90 5.1.2 함수를 변수처럼 전달하기 ������������������������������������������������������������������������������������ 91 5.2 람다 ��������������������������������������������������������������������������������������������������������������������������� 91 9 CONTENTSCHAPTER 6 객체지향과 클래스 6.1 클래스 ������������������������������������������������������������������������������������������������������������������������ 95 6.2 클래스 변수와 인스턴스 변수 ����������������������������������������������������������������������������������������� 96 6.3 클래스 메서드 �������������������������������������������������������������������������������������������������������������� 98 6.4 상속 ������������������������������������������������������������������������������������������������������������������������� 101 6.5 덕 타이핑 ������������������������������������������������������������������������������������������������������������������ 102CHAPTER 7 모듈과 패키지 7.1 모듈 ������������������������������������������������������������������������������������������������������������������������� 105 7.1.1 모듈 만들기 ������������������������������������������������������������������������������������������������������ 105 7.1.2 모듈 불러오기 ��������������������������������������������������������������������������������������������������� 106 7.1.3 특정 함수나 클래스만 불러오기 ��������������������������������������������������������������������������� 107 7.1.4 다른 이름으로 모듈 불러오기 ������������������������������������������������������������������������������ 109 7.1.5 모듈 실행하기 ��������������������������������������������������������������������������������������������������� 110 7.2 패키지 ���������������������������������������������������������������������������������������������������������������������� 111 7.2.1 패키지 만들기 ��������������������������������������������������������������������������������������������������� 111 7.2.2 패키지 불러오기 ������������������������������������������������������������������������������������������������ 113CHAPTER 8 파일 읽고 쓰기 8.1 파일 열기와 읽기 �������������������������������������������������������������������������������������������������������� 115 8.1.1 파일 전체 읽기 �������������������������������������������������������������������������������������������������� 11610 8.1.2 파일 한 행 읽기 ������������������������������������������������������������������������������������������������� 117 8.1.3 파일 전부를 읽고 한 행마다 리스트 아이템으로 가져오기 ��������������������������������������� 117 8.1.4 for 문 이용하기 ������������������������������������������������������������������������������������������������� 118 8.2 파일 닫기 ������������������������������������������������������������������������������������������������������������������ 119 8.2.1 with 이용하기 ��������������������������������������������������������������������������������������������������� 120IIPART 도전! 파이썬 실무 예제CHAPTER 9 크롤링 애플리케이션 만들기 9.1 스크래피 ������������������������������������������������������������������������������������������������������������������� 123 9.2 설치 ������������������������������������������������������������������������������������������������������������������������� 124 9.2.1 스크래피 프로젝트 생성 ������������������������������������������������������������������������������������� 124 9.2.2 아이템 설정하기 ������������������������������������������������������������������������������������������������ 126 9.3 스파이더 만들기 ��������������������������������������������������������������������������������������������������������� 128 9.3.1 스파이더 파일 수정하기 ������������������������������������������������������������������������������������� 130 9.4 스파이더 규칙 설정하기 ���������������������������������������������������������������������������������������������� 131 9.5 파서 함수 정의하기 ���������������������������������������������������������������������������������������������������� 136 9.6 완성된 스파이더 클래스 ���������������������������������������������������������������������������������������������� 139 9.7 크롤링 GO! ��������������������������������������������������������������������������������������������������������������� 141 11 CONTENTSCHAPTER 10 SQLite 데이터베이스 사용하기 10.1 SQLite ������������������������������������������������������������������������������������������������������������������� 143 10.2 데이터베이스 연결하기 ��������������������������������������������������������������������������������������������� 144 10.3 테이블 생성하기 ������������������������������������������������������������������������������������������������������ 145 10.4 데이터 삽입 ������������������������������������������������������������������������������������������������������������ 146 10.4.1 여러 개 데이터 한꺼번에 넣기 ��������������������������������������������������������������������������� 147 10.5 데이터 선택하기 ������������������������������������������������������������������������������������������������������ 149 10.6 기존 데이터 갱신하기 ����������������������������������������������������������������������������������������������� 151 10.7 데이터 삭제하기 ������������������������������������������������������������������������������������������������������ 152CHAPTER 11 플라스크로 API 서버 만들기 11.1 설치와 Hello World 웹 페이지 실행하기 �������������������������������������������������������������������� 155 11.2 파라미터로 URL 경로와 쿼리 추가하기 ���������������������������������������������������������������������� 157 11.3 API 서버 만들기 ������������������������������������������������������������������������������������������������������ 159 11.3.1 데이터베이스와 연결하기 ��������������������������������������������������������������������������������� 159 11.3.2 모든 데이터 내려받기 �������������������������������������������������������������������������������������� 160 11.3.3 조건에 따라 데이터 가져오기 ���������������������������������������������������������������������������� 161 11.3.4 최종 코드 ������������������������������������������������������������������������������������������������������� 163CHAPTER 12 슬랙 봇 만들기 12.1 봇이 뭐죠? ������������������������������������������������������������������������������������������������������������� 167 12.2 제작 과정 알아보기 �������������������������������������������������������������������������������������������������� 16912 12.3 상호작용하는 주사위 봇 만들기 ��������������������������������������������������������������������������������� 169 12.3.1 슬랙 봇 API 토큰 얻기 ������������������������������������������������������������������������������������� 170 12.3.2 slackbot 패키지 설치 �������������������������������������������������������������������������������������� 172 12.3.3 파일 만들기 ���������������������������������������������������������������������������������������������������� 172 12.3.4 주사위 기능 설정하기 �������������������������������������������������������������������������������������� 174 12.4 정기적인 작업을 실행하는 봇 만들기 �������������������������������������������������������������������������� 178 12.4.1 API 토큰 얻기 ������������������������������������������������������������������������������������������������� 178 12.4.2 터미널에서 메시지 보내기 �������������������������������������������������������������������������������� 180 12.4.3 작업을 파이썬 파일로 만들기 ���������������������������������������������������������������������������� 180 12.4.4 파이썬 파일을 실행하는 셸 스크립트 만들기 ������������������������������������������������������� 181 12.4.5 crontab을 이용해 스크립트를 주기적으로 실행하기 �������������������������������������������� 182CHAPTER 13 메시지 큐 만들기 13.1 메시지 큐 ��������������������������������������������������������������������������������������������������������������� 185 13.2 RabbitMQ 소개 ������������������������������������������������������������������������������������������������������ 186 13.2.1 RabbitMQ 설치와 메시지 큐 서버 실행하기 ������������������������������������������������������� 187 13.3 RabbitMQ의 기본 동작 개념 ������������������������������������������������������������������������������������ 188 13.3.1 pika 패키지 설치 �������������������������������������������������������������������������������������������� 189 13.3.2 메시지 전달: 큐에 넣고 가져오기 ����������������������������������������������������������������������� 189 13.3.3 작업 분배: 큐에 넣고, 여러 개의 워커가 가져가고, 작업 종료 확인하기 ������������������� 193 13.4 셀러리: 메시지 큐를 이용한 분산 처리 애플리케이션 ���������������������������������������������������� 198 13.4.1 설치 �������������������������������������������������������������������������������������������������������������� 198 13.4.2 셀러리의 동작 구조 ����������������������������������������������������������������������������������������� 199 13.4.3 워커 서버 ������������������������������������������������������������������������������������������������������� 199 13.4.4 태스크 퍼블리셔(사용자 앱) ������������������������������������������������������������������������������ 202 13 CHAPTER 14 팬더스로 데이터 분석하기 14.1 팬더스 �������������������������������������������������������������������������������������������������������������������� 207 14.2 설치하기 ����������������������������������������������������������������������������������������������������������������� 209 14.3 데이터 타입 만들기 �������������������������������������������������������������������������������������������������� 209 14.3.1 Series 데이터 타입 만들기 ������������������������������������������������������������������������������� 209 14.3.2 DataFrame 데이터 타입 만들기 ����������������������������������������������������������������������� 212 14.4 데이터를 불러오고 저장하기 ������������������������������������������������������������������������������������� 214 14.4.1 CSV 파일 ������������������������������������������������������������������������������������������������������ 214 14.4.2 엑셀 파일 ������������������������������������������������������������������������������������������������������� 215 14.4.3 데이터베이스 �������������������������������������������������������������������������������������������������� 217 14.5 여러 가지 형태로 데이터 다루기 �������������������������������������������������������������������������������� 218 14.5.1 조건에 맞춰 데이터 선택해 가져오기 ����������������������������������������������������������������� 219 14.5.2 불리언 인덱싱 ������������������������������������������������������������������������������������������������� 220 14.5.3 인덱스 기준에 따라 데이터 다루기 �������������������������������������������������������������������� 222 14.6 데이터 병합하기 ������������������������������������������������������������������������������������������������������ 224 14.6.1 merge( ) �������������������������������������������������������������������������������������������������������� 225 14.6.2 concat( ) ������������������������������������������������������������������������������������������������������� 229 14.7 데이터 분석하기 ������������������������������������������������������������������������������������������������������ 231 14.7.1 그룹화하기 ����������������������������������������������������������������������������������������������������� 231 14.7.2 agg( )와 apply( ) 함수로 데이터 가공하기 ���������������������������������������������������������� 235 14.7.3 그래프 그리기 ������������������������������������������������������������������������������������������������� 23914 CHAPTER 15 Open API로 매시업 API 서버 만들기 15.1 접근 권한 획득하기 �������������������������������������������������������������������������������������������������� 241 15.1.1 카카오 API 키 획득하기 ����������������������������������������������������������������������������������� 242 15.1.2 네이버 API 키 획득하기 ����������������������������������������������������������������������������������� 243 15.2 데이터 요청하기와 표시하기 ������������������������������������������������������������������������������������� 245 15.2.1 Daum ����������������������������������������������������������������������������������������������������������� 245 15.2.2 네이버 ����������������������������������������������������������������������������������������������������������� 246 15.3 매시업 API 서버 만들기 ������������������������������������������������������������������������������������������� 249 15.3.1 영화 정보를 모아서 보여주기 ���������������������������������������������������������������������������� 249 15.3.2 영화 검색 결과 가져오기 ���������������������������������������������������������������������������������� 252 15.3.3 매시업 API 서버 만들기 ����������������������������������������������������������������������������������� 257 15.3.4 HTML 렌더링을 위한 템플릿 ���������������������������������������������������������������������������� 259 15.3.5 매시업 응용 ���������������������������������������������������������������������������������������������������� 262APPENDIX A pip 설치와 venv 설정하기 A.1 패키지 관리자 pip ����������������������������������������������������������������������������������������������������� 263 A.1.1 우분투에서 설치하기 ����������������������������������������������������������������������������������������� 263 A.1.2 macOS 및 윈도우에서 설치하기 ������������������������������������������������������������������������ 264 A.1.3 pip 업그레이드 ������������������������������������������������������������������������������������������������� 265 A.2 가상 환경 venv ��������������������������������������������������������������������������������������������������������� 265 A.2.1 가상 환경 설정 ������������������������������������������������������������������������������������������������� 266 A.3 pip와 venv를 동시에 활용하기 ������������������������������������������������������������������������������������ 269 15 APPENDIX B IPython과 Jupyter Notebook B.1 IPython ������������������������������������������������������������������������������������������������������������������� 271 B.2 Jupyter Notebook ��������������������������������������������������������������������������������������������������� 273 B.3 IPython과 Jupyter Notebook 설치 ���������������������������������������������������������������������������� 274 B.4 IPython 사용하기 ������������������������������������������������������������������������������������������������������ 274 B.5 Jupyter Notebook 사용법 ����������������������������������������������������������������������������������������� 276APPENDIX C PEP 8 C.1 코드 레이아웃 ����������������������������������������������������������������������������������������������������������� 282 C.1.1 들여쓰기 ���������������������������������������������������������������������������������������������������������� 282 C.1.2 탭이냐 스페이스냐 �������������������������������������������������������������������������������������������� 283 C.1.3 한 행의 길이는? ����������������������������������������������������������������������������������������������� 283 C.1.4 빈 행은 어떻게 얼마나? ������������������������������������������������������������������������������������� 284 C.1.5 소스 코드 파일의 인코딩은 어떻게? �������������������������������������������������������������������� 285 C.1.6 imports ���������������������������������������������������������������������������������������������������������� 285 C.2 공백 표현과 구문 ������������������������������������������������������������������������������������������������������� 286 C.2.1 성가신 것들 ����������������������������������������������������������������������������������������������������� 286 C.2.2 그 외의 추천하는 방법 ��������������������������������������������������������������������������������������� 288 C.3 주석 ������������������������������������������������������������������������������������������������������������������������� 290 C.3.1 블록 주석 ��������������������������������������������������������������������������������������������������������� 290 C.3.2 인라인 주석 ����������������������������������������������������������������������������������������������������� 291 찾아보기 �������������������������������������������������������������������������������������������������������������������������� 29216 I Part 빠르게 살펴보는 파이썬 기초1부에서는 파이썬의 역사와 특징을 소개하고 다른 프로그래밍 언어를 배운 사람이 파이썬을 이해하는 데 꼭필요한 최소한의 기본 문법을 설명합니다. 1부를 꼼꼼하게 읽어본다면 현업에서 빠르게 파이썬을 활용하는 데훌륭한 가이드가 되어 줄 것입니다. Part I빠르게 살펴보는 파이썬 기초1장 파이썬 프로그래밍 준비와 시작2장 파이썬의 주요 특징3장 데이터 타입과 기본 연산자4장 흐름 제어와 예외 처리5장 함수와 람다6장 객체지향과 클래스7장 모듈과 패키지8장 파일 읽고 쓰기 1CHAPTER파이썬 프로그래밍 준비와 시작이번 장에서는 파이썬이 무엇인지, 파이썬을 활용하는 법을 배우기 전에 파이썬 그 자체를 알아보겠습니다. 파이썬의 역사부터 시작해서, 조금은 어려울 수 있는 Hello World 예제까지해보겠습니다.1.1 파이썬의 역사파이썬은 1991년에 귀도 반 로섬Guido van 이Rossum 발표한 프로그래밍 언어입니다. 동적 타이핑스크립트 언어로, 이와 비교할만한 언어라고 한다면 펄Perl이나 루비Ruby 등을 이야기할 수 있습니다. 파이썬은 뱀 이름이기도 하지만 귀도는 자신이 좋아하는 ‘몬티 파이썬의 플라잉 서커스’에서 이름을 따왔다고 밝혔습니다.파이썬은 점점 발전해서 현재 프로그래밍 언어의 인기도를 조사해 공개하는 TIOBE Index1순위에서 상위권을 유지하고 있습니다.1 http://www.tiobe.com/tiobe-index CHAPTER 1 파이썬 프로그래밍 준비와 시작 19 그림 1-1 TIOBE Index파이썬은 현재 2.x와 3.x 버전을 유지하고 있습니다. 2.x는 ‘2.7.x’의 형태로 지원은 계속 하지만 새로운 기능이 추가되는 메이저 업데이트는 없을 것으로 말하는 버전입니다.3.x는 앞으로도 계속 발전할 버전입니다. 프로젝트에 사용하는 라이브러리가 특별히 2.x만 지원하는 것이 아니라면 3.x를 사용하길 권합니다. 이 책은 3.x를 기준으로 설명합니다.1.2 파이썬을 익히면 좋은 점위키백과에서는 파이썬의 특징을 다음과 같이 표현합니다. 초보자부터 전문가까지 사용자층을 보유하고 있으며, 다양한 플랫폼에서 쓸 수 있고, 라이브러리(모듈)가 풍 부하여, 대학을 비롯한 여러 교육 기관, 연구 기관 및 산업계에서 이용이 증가하고 있다.즉, 어떤 연구 과정에서 프로그래밍이 필요할 때 파이썬으로 쉽고 빠르게 아이디어를 실증해볼수 있다는 의미입니다. 이는 강력한 IDE를 제공하며, 컴파일하지 않고 변경 사항을 즉시 확인할 수 있다는 장점 때문이라고 생각합니다.20 개발자를 위한 파이썬 또한 C나 자바 등으로 구현하기 번거로운 각종 반복 작업을 쉽게 구현해 자동화할 수 있습니다. 이는 수많은 라이브러리 덕분입니다. 또한 운영체제를 가리지 않는 호환성은 어떤 환경에서 파이썬으로 구현한 프로그램을 실행해도 작업에 차질이 없게끔 합니다.2010년대에는 프로그래밍 교육용 언어로 파이썬을 도입하고 있습니다.1.3 파이썬 활용이 활발한 개발 분야파이썬은 다양한 분야에서 활용합니다. 그 중 유명한 몇 가지 분야와 그에 맞는 라이브러리나프레임워크를 소개하겠습니다.1.3.1 웹 애플리케이션 개발파이썬을 많이 사용하는 분야로 웹 애플리케이션 개발이 있습니다. 이 분야에는 유명한 2개의프레임워크가 있습니다. 하나는 플라스크Flask2입니다. ‘microframework for Python’이라는소개글처럼 정말 간단한 웹이나 모바일 앱 서버를 만들기에 적합한 웹 프레임워크입니다.그림 1-2 플라스크2 http://flask.pocoo.org/ CHAPTER 1 파이썬 프로그래밍 준비와 시작 21 또 다른 프레임워크로는 장고Django3가 있습니다. 장고는 웹 사이트를 구축할 때 필요한 회원 가입, 로그인, 로그아웃과 같은 각종 요소를 미리 구축해놓았다는 장점이 있습니다.그림 1-3 장고1.3.2 크롤링웹 페이지에서 필요한 데이터를 수집하는 것을 크롤링이라고 합니다. 검색 엔진에서 유용한 검색 결과를 내는 데는 크롤링이 큰 역할을 했습니다. 또한 다음에 소개할 데이터 과학에 필요한원 데이터를 수집하는 데도 활용할 수 있습니다.파이썬에서 많이 사용하는 크롤링 라이브러리로는 뷰티풀 수프Beautiful 가Soup4 있습니다. 프레임워크로는 스크래피scrapy5가 있습니다.뷰티풀 수프는 HTML을 파싱하는 데 사용하는 라이브러리로 구문 분석, 트리 탐색, 검색과 수정을 위한 관용구를 이용해 문서를 분석하고 필요한 것을 추출합니다. 애플리케이션을 작성하는 데 많은 코드가 필요하지 않고, 문서 인코딩을 자동으로 UTF-8로 변환하는 등의 기능이있습니다. 또한 lxml6이나 html5lib7과 같은 인기 있는 파이썬 파서와 함께 사용할 수 있기도합니다.3 https://www.djangoproject.com/4 https://www.crummy.com/software/BeautifulSoup/5 https://scrapy.org/6 http://lxml.de/7 https://pypi.python.org/pypi/html5lib22 개발자를 위한 파이썬 그림 1-4 뷰티풀 수프스크래피는 웹 크롤링을 지원하는 프레임워크입니다. 데이터를 추출하는 규칙을 작성하면 나머지는 스크래피를 이용해 크롤링을 처리할 수 있습니다. 구조화되어 있는 데이터를 추출하는데 강점이 있습니다. 또한 스크래피 코어를 수정하지 않고도 쉽게 새로운 기능을 연결할 수 있기도 합니다.그림 1-5 스크래피1.3.3 데이터 과학과 인공지능 개발빅데이터, 머신러닝 등 데이터를 분석해서 활용하는 데이터 과학과 인공지능 분야는 파이썬을굉장히 활발하게 활용하는 분야입니다. CHAPTER 1 파이썬 프로그래밍 준비와 시작 23 팬더스pandas8는 사용하기 쉬운 고성능의 데이터 구조 및 데이터 분석 도구를 제공하는 라이브러리입니다.그림 1-6 팬더스또한 NumPy와 SciPy도 유명한 데이터 분석 도구입니다. NumPy9는 과학 연구 컴퓨팅에 필요한 구성 요소가 있는 패키지입니다. N차원 배열 객체를 만든다거나 선형대수, 푸리에 변환,난수 변환 기능 등을 포함합니다.그림 1-7 NumPy8 http://pandas.pydata.org/9 http://www.numpy.org/24 개발자를 위한 파이썬 SciPy10는 수학, 과학, 공학을 위한 오픈 소스 소프트웨어 패키지입니다. 앞서 소개한NumPy, 팬더스와 SciPy 라이브러리, IPython, Sympy, Matplotlib 등을 포함한 코어 패키지라고 소개합니다.그림 1-8 SciPy머신러닝에 이용하는 라이브러리로는 scikit-learn11이 있습니다. 방금 설명한 SciPy를 기반으로 데이터 마이닝과 머신러닝 서비스를 구현할 수 있는 파이썬 모듈입니다.그림 1-9 scikit-learn10 http://www.scipy.org/11 http://scikit-learn.org/ CHAPTER 1 파이썬 프로그래밍 준비와 시작 25 구글에서 만든 텐서플로TensorFlow12는 수학, 물리학, 통계학 등 다양한 학문 문야에서 활용할 수있는 머신러닝 및 딥러닝 라이브러리입니다. CPU/GPU에서 동작할 수 있으며 연산 구조와 함수를 정의하면 미분 계산을 처리하고 이를 그래프로 표현하는 등 복잡한 데이터 연산에 최적화되어 있습니다. 머신러닝과 딥러닝에 관심 있는 개발자라면 들어봤을 것입니다.그림 1-10 텐서플로 파이썬을 활용할 수 있는 분야 파이썬을 활용할 수 있는 분야에는 무엇이 있을까요? 이를 소개하는 대표적인 웹 사이트가 두 가지 있 습니다. 하나는 위키백과의 ‘List of Python software13’입니다. 지금까지 파이썬으로 개발한 다양한 소 프트웨어의 목록을 알려줍니다. 그림 1-11 위키백과 List of Python software12 https://www.tensorflow.org/13 https://en.wikipedia.org/wiki/List_of_Python_software26 개발자를 위한 파이썬 다른 하나는 ‘Awesome Python14’입니다. 여기는 파이썬을 활용할 수 있는 분야와 해당 분야에서 사 용하는 프레임워크나 라이브러리가 무엇이 있는지 잘 정리되어 있습니다. 그림 1-12 Awesome Python1.4 파이썬 개발 환경 설치이제 파이썬을 본격적으로 시작하기 위한 개발 환경을 설치해보겠습니다. 여기에서는 운영체제별 설치 방법을 간단하게 소개하겠습니다.1.4.1 우분투우분투는 파이썬 2.x 버전과, 3.x 버전 모두 기본으로 탑재하고 있으므로 우분투 설치만으로도 파이썬을 활용할 준비는 끝난 상태입니다. 파이썬이 설치되어 있는지 확인하려면 python–V (2.x 버전) 혹은 python3 –V (3.x 버전) 명령을 실행하면 됩니다(V를 꼭 대문자로 입력해야 합니다).하지만 간혹 설치되어 있지 않은 경우도 있습니다. 수동으로 설치하고 싶다면 아래 명령으로설치하면 됩니다. $ sudo apt-get install python버전넘버14 http://awesome-python.com/ CHAPTER 1 파이썬 프로그래밍 준비와 시작 27 ‘버전넘버’에는 ‘2.7’, ‘3.5’, ‘3.6’ 등의 형식으로 자신이 원하는 버전을 입력하면 됩니다.그림 1-13 우분투 파이썬 설치 확인 파이썬 최신 버전이 설치되지 않았다면 우분투 리눅스에 최신 파이썬 버전이 설치되지 않은 경우가 있습니다. 이때는 앞에서 소개한 명령만으 로는 파이썬 최신 버전을 설치할 수 없습니다. 다음 명령을 차례로 실행해서 파이썬 최신 버전을 설치하 세요. $ sudo add-apt-repository ppa:jonathonf/python-3.x $ sudo apt-get update $ sudo apt-get install python3.x1.4.2 macOSmacOS는 파이썬 2.7만 기본으로 탑재하고 있습니다. 따라서 파이썬 3는 별도로 설치해야 합니다. macOS에서 파이썬을 설치할 때는 파이썬 설치 파일을 다운로드해서 설치하는 방법과‘Homebrew’라는 패키지 관리자를 이용해 설치하는 방법이 있습니다.Homebrew를 이용한 파이썬 설치Homebrew는 macOS에서 소프트웨어를 설치하고 버전별로 관리할 수 있는 패키지 관리 시스템의 하나입니다.28 개발자를 위한 파이썬 실무에서 파이썬을 사용할 때는 다양한 패키지나 가상 환경(부록 A 참고)을 구축할 때가 많으므로 개발자라면 Homebrew를 이용해 파이썬을 설치하길 권합니다.Homebrew 홈페이지15에서 설치 안내를 확인할 수 있습니다.그림 1-14 Homebrew 홈페이지[응용 프로그램] → [유틸리티] → [터미널]을 실행한 후 ‘Install Homebrew’ 아래에 있는 다음 명령을 복사해 붙여넣은 후 실행하면 설치가 끝납니다. $ /usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ install/master/install)\"Homebrew를 설치하면 파이썬 설치 준비가 끝난 셈입니다. 다음 명령을 터미널에서 실행하면 됩니다(우분투와 달리 .x를 불이지 않아야 한다는 점에 주의하세요). $ brew install python3설치하는 데는 시스템에 따라 일정 시간이 소요됩니다. 차분히 기다리길 바랍니다.15 https://brew.sh/index_ko.html CHAPTER 1 파이썬 프로그래밍 준비와 시작 29 macOS의 파이썬 설치 주의 사항 macOS에서 Homebrew나 파이썬을 설치하려면 Xcode Command Line Tools가 설치되어 있어야 합니다. Xcode가 설치되어 있다면 해당 도구가 설치되어 있는데, 만약 Xcode를 설치하지 않은 사용자 라면 다음 명령을 이용해 Xcode Command Line Tools를 별도로 설치할 수 있습니다. $ xcode-select --install 또한 Homebrew 설치 스크립트는 변경될 가능성이 있습니다. 따라서 Homebrew가 설치되지 않는 다면 홈페이지에 있는 명령어에 변화가 있는지 확인해야 합니다. 또한 간혹 Xcode 라이선스에 동의하 지 않았다면 Homebrew가 제대로 설치되지 않을 수 있습니다. 이때는 아래 명령을 실행한 다음 다시 Homebrew 설치 명령을 실행하기 바랍니다. $ sudo xcodebuild –license파이썬 설치 파일파이썬 개발 환경 다운로드 사이트16를 방문해 자신의 운영체제에 맞는 설치 파일을 다운로드한 후 설치하면 됩니다. 이 책에서는 3.x 버전을 활용할 것이니 버튼을 눌러 설치 파일을 다운로드합니다.그림 1-15 파이썬 다운로드 페이지(macOS)설치는 <계속> 버튼을 누르면 되므로 따로 설명하지는 않겠습니다.16 https://www.python.org/downloads/30 개발자를 위한 파이썬 1.4.3 윈도우윈도우는 우분투나 macOS와는 달리 파이썬이 기본으로 설치되어 있지 않습니다. 따라서 직접 파이썬 개발 환경 다운로드 사이트에서 파일을 다운로드해서 설치해야 합니다.먼저 파이썬 개발 환경 다운로드 사이트에 접속합니다. 다음과 같은 버튼을 눌러 파일을 다운로드합니다. 대부분 운영체제 버전에 맞춰서 알맞은 설치 파일을 자동으로 골라서 보여줍니다.그림 1-16 파이썬 다운로드 페이지(윈도우)다운로드한 파일을 더블 클릭해 설치를 시작합니다. 설치할 때는 꼭 [Add Python 3.5 toPATH]의 체크를 켜주세요. 윈도우의 명령 프롬프트 혹은 Windows PowerShell을 실행하면 파이썬을 바로 사용할 수 있습니다.그림 1-17 파이썬 설치에 필요한 설정 CHAPTER 1 파이썬 프로그래밍 준비와 시작 31 설치가 완료되면 시작 메뉴에서 [Python 3.x]를 선택합니다.그림 1-18 파이썬 개발 환경 구성REPLRead–eval–print loop 방식으로 파이썬을 실행하는 [Python 3.x (32-bit )]를 실행합니다.그림 1-19 파이썬 인터프리터 실행이제 윈도우에서 파이썬을 실행할 준비가 끝났습니다.32 개발자를 위한 파이썬 1.5 조금은 어려운 Hello World파이썬으로 무언가를 하기가 얼마나 간단한지는 다음 코드만 봐도 알 수 있습니다. 일단은 전통적인 Hello World, 즉 출력입니다.코드 1-1 Hello World In[1]: print(\"Hello Miku!\") Out[1]: Hello Miku!파이썬의 철학 중 하나로 ‘건전지 포함Batteries included’이라는 개념입니다. 여러 가지 기본적인 라이브러리들을 포함시켜 별도로 찾아 설치하지 않아도 바로 사용할 수 있게 하자는 것이죠.참고로 파이썬에서 기본으로 제공하는 표준 라이브러리의 목록은 ‘The Python StandardLibrary17’에서 확인할 수 있습니다. 여기 있는 방대한 라이브러리들이 파이썬 기본 라이브러리입니다. 이 책의 코드 표기 방식 이 책의 예제는 터미널이나 파이썬 셸에서 py 파일을 실행하면 좋은 예제와 부록 B에서 설명하는 Jupyter Notebook에서 실행하면 좋은 예제가 있습니다. 후자의 경우는 코드 부분 위에 In[숫자]:를, 출 력 결과 부분 위에는 Out[숫자]: 형태로 표기했습니다. Jupyter Notebook 자세한 사용 방법은 해당 부 록을 참고하기 바랍니다.1.5.1 입력과 출력100번의 설명보다 한 번의 코드가 더 좋은 법입니다. 입력을 받은 후 해당 내용을 출력하는 간단한 파이썬 코드를 소개하겠습니다.17 https://docs.python.org/3/library/index.html CHAPTER 1 파이썬 프로그래밍 준비와 시작 33 코드 1-2 입력을 받은 후 출력 In[2]: user_name = input(\"Please input Your name: \") user_number = input(\"Please input your favorite number: \") print(\"%s's favorite number is %d\"%(user_name, int(user_number) )) Out[2]: Please input Your name: Miku Please input your favorite number: 39 Miku's favorite number is 39그럼 여기서 조금 더 나아가서 파일을 읽고 쓰는 것을 해보겠습니다. 예제 파일 ch01 디렉터리안에 있는 test.csv 파일을 이용하겠습니다. 파일 안에는 0~99의 숫자가 열 하나에 입력되어있습니다.코드 1-3 파일 읽고 쓰기 In[3]: infile_name = input(\"Please input file name: \") outfile_name = \"out.log\" with open(infile_name) as infile: with open(outfile_name, \"w\") as outfile: for in_line in infile.readlines(): outfile.write(\"read from '%s' : %s\"%(infile_name, in_line)) Out[3]: Please input file name: test.csv입력 파일을 test.csv라고 입력하면 출력 파일은 out.log라고 생성되며 다음과 같은 출력 내용을 저장합니다. read from 'test.csv' : 0 read from 'test.csv' : 1 read from 'test.csv' : 2 read from 'test.csv' : 3 read from 'test.csv' : 434 개발자를 위한 파이썬 # 중간 생략 read from 'test.csv' : 95 read from 'test.csv' : 96 read from 'test.csv' : 97 read from 'test.csv' : 98 read from 'test.csv' : 99즉, [코드 1-3]은 입력받은 파일을 열어서 한 줄마다 “read from 'test.csv' :”라는 메시지를 덧붙여서 새로운 파일을 만드는 프로그램입니다. 여기서는 단순히 메시지를 복사했지만 사용자가 원하는 바에 따라서 중간에 다양한 계산을 할 수도 있을 겁니다. CHAPTER 1 파이썬 프로그래밍 준비와 시작 35 II Part 도전! 파이썬 실무 예제2부에서는 필자가 실무에서 겪었던 경험을 바탕으로 둔 예제를 소개합니다. 실제로 바로 현업에서 사용하기에무리가 없는 수준의 예제를 목표로 만들었으며, 예제 중 몇 가지는 서로 유기적으로 연동할 수 있게 구성했습니다. 하지만 그와는 별개로 현재 필요를 느끼는 부분만 먼저 골라서 볼 수도 있습니다.2부를 원활히 진행하려면 부록에서 설명하는 Jupyter Notebook과 가상 환경인 venv 설정을 꼭 살펴볼 것을 권합니다. 이 도구들은 이 책의 예제는 물론 실무에서 파이썬을 사용할 때 꼭 활용하는 도구입니다. Part II도전! 파이썬 실무 예제9장 크롤링 애플리케이션 만들기10장 SQLite 데이터베이스 사용하기11장 플라스크로 API 서버 만들기12장 슬랙 봇 만들기13장 메시지 큐 만들기14장 팬더스로 데이터 분석하기15장 Open API로 매시업 API 서버 만들기 9CHAPTER 크롤링 애플리케이션 만들기파이썬을 이용하는 목적에는 여러 가지가 있습니다. 그중 하나는 서비스하는 웹 페이지의 다양한 데이터를 수집하는 크롤링이 있습니다. 약 100여 행 정도의 코드로 사이트의 특정 게시글들을 모아서 데이터를 만들고, 그렇게 쌓인 데이터를 적절하게 분석해서 유의미한 정보를 만들거나 주기적으로 수집해서 어딘가에 보고하는 기반으로 사용할 수 있습니다.이 장에서는 파이썬을 이용해 간단한 크롤링 애플리케이션을 만들어보겠습니다. 스크래피scrapy를 사용합니다.9.1 스크래피파이썬으로 만들어진 대표적인 크롤러는 스크래피입니다. 크롤링 프레임워크라고도 할 수 있습니다(스크래피 홈페이지에서 직접 그렇게 소개하고 있기도 합니다). 2008년 처음 0.7 버전이 공개된 이후 지속적인 개선을 거쳐 2017년 10월 현재 1.4 버전을 배포하고 있습니다. 버전히스토리는 https://doc.scrapy.org/en/latest/news.html에서 확인할 수 있습니다.스크래피의 장점은 다음과 같이 요약해볼 수 있습니다. ● 스 크랩할 항목 유형을 정의하는 클래스를 만들 수 있습니다. ● 수 집한 데이터를 원하는 대로 편집하는 기능을 제공합니다. CHAPTER 9 크롤링 애플리케이션 만들기 123 ● 서 버에 연동하기 위해 기능을 확장할 수 있습니다. ● 크롤링 결과를 JSON, XML, CSV 등의 형식으로 내보낼 수 있습니다. ● 손상된 HTML 파일을 분석할 수 있습니다.본격적으로 예제를 살펴보기 전, 먼저 스크래피를 이용해서 크롤러를 만드는 대략적인 과정을설명해보겠습니다. 다음과 같습니다. 1 크 롤링할 아이템(item )을 설정합니다. 2 실 제 크롤링할 스파이더(spider, 스크래피의 크롤러)를 만듭니다. 3 크롤링할 사이트(시작점)와 크롤링 규칙을 설정합니다. 4 스 파이더의 종류에 따른 몇 가지 설정을 추가합니다. 예를 들어 크롤링할 URL의 패턴 등을 설정합니다. 5 HTML 문서를 파싱한 후 크롤러가 실행할 작업을 정의합니다. 6 크롤러를 실행합니다.그럼 이 과정을 참고해 예제를 만들기 시작하겠습니다.9.2 설치이번 절에서는 스크래피를 설치하고, 프로젝트를 생성하고, 크롤링의 핵심이 되는 아이템 설정하기까지 살펴보겠습니다.9.2.1 스크래피 프로젝트 생성앞서 이야기했듯이 스크래피는 크롤링 프레임워크입니다. 그래서 단순히 코드 안에 패키지를불러와서 실행할 수 없습니다. 물론 이러한 번거로움을 상쇄할 만큼 강력한 기능을 제공하기에충분히 감내할 수 있습니다.일단 pip install scrapy 명령을 실행해 스크래피를 설치합니다. 설치 후 터미널에서scrapy 명령어를 입력하면, 다음과 같이 사용 가능한 옵션들을 확인할 수 있습니다. $ scrapy Scrapy 1.4.0 - no active project124 개발자를 위한 파이썬 Usage: scrapy [options] [args]Available commands:bench Run quick benchmark testfetch Fetch a URL using the Scrapy downloadergenspider Generate new spider using pre-defined templatesrunspider Run a self-contained spider (without creating a project)settings Get settings valuesshell Interactive scraping consolestartproject Create new projectversion Print Scrapy versionview Open URL in browser, as seen by Scrapy[ more ] More commands available when run from project directoryUse \"scrapy -h\" to see more info about a command현재 위치에 활성화된 스크래피 프로젝트가 없다는 정보를 표시한 후 사용할 수 있는 명령을쭉 표시해줍니다. 여기서는 새 프로젝트를 시작할 것이므로 startproject 명령을 사용할 겁니다.이제 scrapy startproject <프로젝트이름> 명령을 실행해 새 프로젝트를 생성합니다. 프로젝트 이름은 원하는 대로 설정하면 됩니다(이 책에서는 한빛미디어 홈페이지를 크롤링해볼예정이므로 프로젝트 이름을 hanbit_media로 설정했습니다). $ scrapy startproject hanbit_media셸에서 tree hanbit_media 명령을 실행하면 현재 위치에 생성된 스크래피 프로젝트 파일들을 확인할 수 있습니다. $ tree hanbit_media hanbit_media ├── hanbit_media │ ├── __init__.py │ ├── __pycache__ │ ├── items.py │ ├── middlewares.py │ ├── pipelines.py CHAPTER 9 크롤링 애플리케이션 만들기 125 │ ├── settings.py │ └── spiders │ ├── __init__.py │ └── __pycache__ └── scrapy.cfg 4 directories, 7 files9.2.2 아이템 설정하기크롤링하는 이유는 여러 가지가 있겠지만, 기본적으로 비정형 데이터인 웹 페이지를 목적에 맞게 일정한 형태로 가공할 상황이 가장 많을 것입니다. 그래야 불규칙하게 흩어진 데이터를 정보로 만들 수 있습니다. 즉, 아이템 정의는 측정하기 위한 기준을 세우는 것이라고 할 수 있습니다. 우선 프로젝트를 만들면서 생성된 파일 중에 items.py 파일을 열어봅니다.코드 9-1 items.py 파일 내용 확인 # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # http://doc.scrapy.org/en/latest/topics/items.html import scrapy class HanbitMediaItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() pass# name = scrapy.Field ( ) 주석이 아이템을 설정하는 코드 예입니다. 즉, <크롤링할항목이름> = scrapy.Field ( ) 형태로 아이템을 설정하라는 뜻입니다.다음은 한빛미디어의 도서 소개 페이지를 살펴보겠습니다. 보통 책 정보에는 표지, 책 이름, 저자 이름, 번역자 이름, 출간일, 책 페이지 수, ISBN 등의 정보를 볼 수 있습니다.126 개발자를 위한 파이썬 그림 9-1 한빛미디어 홈페이지의 책 정보이제 한빛미디어 홈페이지의 책 정보를 아이템으로 설정할 것입니다. [코드 9-2]를 참고해item.py 파일을 수정합니다.코드 9-2 items.py에 아이템 설정 import scrapy class HanbitMediaItem(scrapy.Item): # define the fields for your item here like: # 책 이름 book_title = scrapy.Field() # 저자 이름 book_author = scrapy.Field() # 번역자 이름 book_translator = scrapy.Field() # 출간일 book_pub_date = scrapy.Field() # ISBN book_isbn = scrapy.Field() pass CHAPTER 9 크롤링 애플리케이션 만들기 127 책 제목은 book_title, 저자 이름은 book_author, 번역자 이름은 book_translator, 출간일은 book_pub_date, ISBN은 book_isbn으로 설정했습니다. 이 아이템들로 해당 정보를 수집할 거라는 템플릿을 스크래피에 제시하는 역할을 합니다.9.3 스파이더 만들기수집할 정보를 결정해 아이템으로 설정했으니 실제 정보를 수집해야 합니다. 이제 사이트를 크롤링할 스파이더spider를 만들 차례입니다. 여담으로 스파이더의 뜻인 거미는 기어 다니니까 그야말로 크롤러의 뜻인 ‘기어 다니는 것’에 잘 어울린다고 생각합니다.스크래피에서 스파이더를 생성해주는 명령어는 genspider입니다. 9.2.1의 스크래피 명령어목록에서도 확인한 바 있습니다. 따라서 scrapy genspider 명령을 해당 프로젝트의 디렉터리에서 실행하면 genspider 명령의 각종 옵션과 사용 방법을 확인할 수 있습니다(이 예제라면 hanbit_media 디렉터리로 이동해서 실행하면 됩니다). 실행 결과는 다음과 같습니다.$ scrapy genspiderUsage===== scrapy genspider [options] Generate new spider using pre-defined templatesOptions=======--help, -h show this help message and exit--list, -l List available templates--edit, -e Edit spider after creating it--dump=TEMPLATE, -d TEMPLATE Dump template to standard output--template=TEMPLATE, -t TEMPLATE Uses a custom template.--force If the spider already exists, overwrite it with the templateGlobal Options log file. if omitted stderr will be used----------------logfile=FILE128 개발자를 위한 파이썬 --loglevel=LEVEL, -L LEVEL log level (default: DEBUG)--nolog disable logging completely--profile=FILE write python cProfile stats to FILE--pidfile=FILE write process ID to FILE--set=NAME=VALUE, -s NAME=VALUE set/override setting (may be repeated)--pdb enable pdb on failure스파이더를 생성할 때 필요한 옵션은 -t입니다. -t 옵션은 크롤러의 템플릿을 결정할 때 사용합니다. 추가로 어떤 부가 옵션이 있는지 간략하게 소개하면 다음과 같습니다. ● basic : 가장 기본적인 크롤러입니다. 에서 설정한 페이지만 크롤링합니다. ● crawl : 설정한 규칙에 맞는 링크들을 재귀적으로 탐색합니다. 아마 대부분의 크롤링 작업에서 이 스파이더 를 사용할 것입니다. ● x mlfeed : xml 피드를 크롤링합니다. 더 자세하게 말하면 xml의 각 노드를 크롤링합니다. ● csvfeed : xmlfeed 크롤러와 비교했을 때 각 행을 크롤링한다는 차이가 있습니다.이제 scrapy genspider -t crawl book_crawl hanbit.co.kr 명령을 실행해 스파이더를생성합니다. 주의할 점은 도메인 이름을 입력할 때 프로토콜인 ‘http://’와 ‘www’를 생략해야한다는 것입니다. 출력 결과는 다음과 같습니다. 스파이더가 새로 생성되었음을 알려줍니다. $ scrapy genspider -t crawl book_crawl hanbit.co.kr Created spider 'book_crawl' using template 'crawl' in module: hanbit_media.spiders.book_crawl스파이더 파일은 spiders 디렉터리에 생성됩니다.코드 9-3 book_crawl.py 내용 확인 # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Ruleclass BookCrawlSpider(CrawlSpider): name = 'book_crawl' allowed_domains = ['hanbit.co.kr'] CHAPTER 9 크롤링 애플리케이션 만들기 129 start_urls = ['http://hanbit.co.kr/'] rules = ( Rule(LinkExtractor(allow = r'Items/'), callback = 'parse_item', follow = True), ) def parse_item(self, response): i = {} #i['domain_id'] = response.xpath('//input[@id = \"sid\"]/@value').extract() #i['name'] = response.xpath('//div[@id = \"name\"]').extract() #i['description'] = response.xpath('//div[@id = \"description\"]').extract() return i코드의 start_urls를 살펴보면 생략했던 http://www.가 있음을 확인할 수 있습니다.참고로 스파이더 생성에 관한 더 자세한 정보는 스크래피 개발 문서의 ‘Generic Spiders1’를살펴보기 바랍니다.9.3.1 스파이더 파일 수정하기스파이더 파일을 생성했다면 이제 목적에 맞게 스파이더 파일을 수정해야 합니다. 여기서는 수집할 링크의 규칙을 정하는 rules와 규칙에 맞는 URL을 발견했을 때 해당 URL의 내용을 파싱하고 정제할 parse_item ( )을 수정해야 합니다. 우선 book_crawl.py를 수정할 때의 코드기본 구조를 살펴보겠습니다. [코드 9-4]와 같습니다.코드 9-4 스파이더 기본 구조 작성 class BookCrawlSpider(CrawlSpider): # 크롤러의 이름입니다. 실제 크롤링을 실행할 때 사용합니다. name = 'book_crawl' # 크롤러 실행을 허용할 도메인을 여기서 지정합니다. # 해당 서버에서 실행되다가 허용된 도메인 이외는 무시합니다. allowed_domains = ['hanbit.co.kr'] # 시작점으로 사용할 URL입니다.1 http://doc.scrapy.org/en/1.4/topics/spiders.html#generic-spiders130 개발자를 위한 파이썬