자바스크립트와 Node.js를 이용한 웹 크롤링 테크닉

2018. 3. 5. 23:13

자바스크립트와 Node.js를 이용한 웹 크롤링 테크닉








제1장 개발 환경 1 

01 자바스크립트 엔진의 이모저모 _ 2 

ECMAScript가 실현한 범용 자바스크립트의 세계 _ 2 

자바스크립트 엔진의 이모저모 _ 3 

자바스크립트가 데이터 수집에 적합한 이유 _ 6 

02 에이전트란 무엇인가? _ 8 

에이전트의 의미 _ 8 

지능형 에이전트 _ 9 

03 개발 환경 구축 _ 11 

가상 머신에 실행 환경 구축 _ 11 

가상 머신 생성 _ 12 

가상 머신에 로그인하기 _ 16 

Node.js 설치 _ 19 

git 설치 _ 21 

04 Node.js 모듈 설치 _ 24 

npm이란? _ 24 

npm install로 모듈 설치 _ 24 

모듈 삭제 _ 30 

05 개발 생산성을 높여 줄 모던한 에디터 소개 _ 31 

자바스크립트 작성에 필요한 에디터는? _ 31 

Atom ― 풍부한 플러그인이 매력 _ 32 

Sublime Text ― 환상적인 커스터마이징 기능으로 사랑에 빠지게 된다는 화제 

Brackets ― HTML 편집에 특화된 빛나는 에디터 _ 36 

통합 개발 환경에서의 자바스크립트 개발 _ 38 

WebStorm ― 자바스크립트 개발에 특화된 개발 환경 _ 39 

NetBeans ― 자바 뿐만 아니라 다양한 웹 개발 언어를 지원 _ 40 


제2장 웹 데이터 수집 41 

01 웹 페이지 다운로드 _ 42 

가장 간단한 다운로드 방법 _ 42 

Node.js로 다운로드해 보자 _ 42 

Rhino/Narshon으로 다운로드해 보기 _ 46 

02 HTML 해석(링크와 이미지 추출) _ 48 

스크래핑이란? _ 48 

HTML 파일 다운로드 _ 49 

HTML 파일에서 링크 추출 _ 51 

이미지 파일 추출 _ 55 

03 사이트를 통째로 다운로드 _ 61 

통째로 다운로드하는 이유 _ 61 

프로그램을 만들어 보자 _ 62 

04 XML/RSS 해석 _ 69 

XML이란? _ 69 

Node.js에서 XML을 다루는 방법 _ 71 

RSS란? _ 76 

XML/RSS 파싱에 cheerio-httpcli를 사용하는 방법 _ 79 

05 정기적으로 다운로드 _ 82 

정기적인 처리를 수행 _ 82 

환율의 변동을 확인하는 API 사용 _ 83 

리눅스/Mac OS X의 경우 _ 85 

윈도우의 경우 _ 90 


제3장 로그인이 필요한 웹사이트 크롤링 95 

01 PhantomJS와 CasperJS _ 96 

PhantomJS와 CasperJS에 관하여 _ 96 

PhantomJS와 CasperJS 설치 _ 98 

간단한 예제 프로그램 _ 99 

플리커 이미지 검색 결과 캡처하기 _ 103 

아이폰용 웹사이트 화면 캡처 _ 105 

인자로 지정한 페이지를 캡처하는 도구 작성 _ 106 

02 로그인 후의 데이터를 다운로드 _ 109 

로그인이 필요한 경우 _ 109 

티스토리에 로그인하기 _ 109 

마우스 클릭 _ 113 

03 DOM 파싱 방법과 CSS 선택자 _ 115 

웹 브라우저의 개발자 도구 사용법 _ 115 

CSS 선택자 지정 방법 _ 118 

CSS 선택자 실전편 _ 120 

04 Electron으로 데스크톱 애플리케이션 작성 _ 124 

Electron이란? _ 124 

Electron 설치 방법 _ 127 

Electron으로 간단한 애플리케이션을 만드는 순서 _ 127 

직접 준비한 HTML을 Electron에 표시 _ 130 

메인 프로세스와 렌더링 프로세스 간의 통신 _ 132 

05 Electron으로 스크린 캡처 _ 138 

스크린샷을 찍는 제일 빠른 방법 _ 138 

Electron으로 스크린샷을 찍는 방법 _ 138 

미세한 조정을 위해 딜레이 주기 _ 142 

캡처할 범위를 지정 _ 144 


제4장 데이터 처리 및 저장 147 

01 문자 코드와 호환 _ 148 

문자 코드란? _ 148 

자바스크립트의 문자 코드 _ 150 

Node.js의 경우 _ 150 

iconv-lite를 사용한 문자 코드 변환 _ 155 

Rhino를 사용하는 경우 _ 156 

02 정규 표현식을 사용한 데이터 변환 _ 157 

정규 표현식이란? _ 157 

자바스크립트에서의 정규 표현식 사용법 _ 158 

03 데이터 형식의 기초 _ 166 

웹에 있는 데이터 형식 _ 166 

JSON 형식이란? _ 167 

JSON의 개량판, JSON5 형식 _ 170 

CSON 형식 _ 172 

XML/RSS 형식 _ 174 

YAML 형식 _ 177 

INI 파일 형식 _ 181 

CSV/TSV 파일 형식 _ 184 

그 외의 형식 _ 188 

04 커피스크립트 _ 190 

왜 커피스크립트인가? _ 190 

커피스크립트 설치 _ 191 

프로그램 실행 방법 _ 191 

커피스크립트의 기본 문법 _ 192 

참과 거짓 _ 195 

배열 _ 196 

연산자 _ 197 

제어 구문 _ 199 

함수 작성 _ 203 

객체지향 _ 206 

05 데이터베이스 사용법 _ 210 

왜 데이터베이스를 사용하는가? _ 210 

관계형 데이터 모델과 NoSQL _ 210 

관계형 데이터베이스 SQLite3 사용 _ 211 

웹으로부터 다운로드하여 SQLite에 저장 _ 213 

NoSQL LevelDB를 사용 _ 217 

데이터를 LevelDB에 보관 _ 223 

06 리포트 자동 생성 _ 227 

리포트 자동 생성 _ 227 

출력 형식 _ 228 

PDF 작성 _ 230 

엑셀 형식으로 작성 _ 238 

Node.js + Ocegen 사용법 _ 238 

Rhino와 Apache POI 사용법 _ 239 

웹 API로 획득한 값을 엑셀에 쓰기 _ 242 


제5장 한글 형태소 분석 245 

01 형태소 분석에 관하여 _ 246 

형태소 분석이란? _ 246 

형태소 분석을 이용하는 방법 _ 247 

mecab-ko의 설치 _ 248 

02 특정 품사의 단어들을 추출 _ 251 

Node.js에서 mecab-ko를 사용하는 방법 _ 251 

프로그램을 정리하여 형태소 분석 모듈 작성 _ 254 

특정 품사의 단어들을 추출하는 프로그램 _ 257 

03 마르코프 체인을 이용한 문서 요약 _ 260 

마르코프 체인을 이용한 문서 요약 _ 260 

프로그램에 관하여 _ 264 

04 간단한 문장 교정 도구 작성 _ 266 

문장 교정 도구에 관하여 _ 266 

05 단어의 출현 빈도 조사 _ 271 

단어의 출현 빈도 조사 _ 271 


제6장 크롤링을 위한 데이터 소스 277 

01 유익한 데이터 소스 목록 _ 278 

데이터 소스에 관하여 _ 278 

SNS의 활용 _ 278 

소셜 북마크 활용 _ 279 

상품 정보 활용 _ 279 

온라인 사전의 활용 _ 280 

오프라인 사전 데이터 활용 _ 280 

블로그 서비스 활용 _ 281 

02 트위터 크롤링 _ 283 

트위터란? _ 283 

트위터 API 준비 _ 283 

03 페이스북 _ 289 

페이스북이란? _ 289 

페이스북 API _ 289 

04 네이버 API 사용 _ 297 

네이버 API _ 297 

05 아마존 API 사용 _ 302 

아마존의 상품 정보 _ 302 

API를 위한 개발자 계정 생성 _ 303 

아마존의 도서 정보 검색 _ 308 

06 플리커의 사진 다운로드 _ 311 

플리커란? _ 311 

API 키 획득 _ 312 

플리커 API를 사용하는 프로그램 제작 _ 314 

07 유튜브 동영상 다운로드 _ 319 

유튜브란 무엇인가? _ 319 

youtube-dl 설치 _ 320 

유튜브 검색 _ 322 

동영상을 검색하고 다운로드 _ 328 

08 Yahoo! Finance에서 환율 및 주식 정보 수집 _ 331 

Yahoo! Finance _ 331 

FX·환율 정보 취득 _ 332 

주가 정보 취득 _ 336 

09 위키피디아 다운로드 _ 339 

위키피디아란? _ 339 

위키피디아의 타이틀 데이터베이스 만들기 _ 343 

타이틀 데이터베이스 활용 _ 346 


제7장 데이터의 분류, 예측과 머신러닝 351 

01 데이터의 활용법에 관하여 _ 352 

데이터를 어떻게 활용할 것인가? _ 352 

데이터 마이닝이란? _ 352 

데이터 마이닝의 기본은 예측, 분류, 연관 규칙 추출 _ 353 

데이터 마이닝의 순서 _ 354 

대표적인 데이터 마이닝 기법 _ 355 

02 베이지안 필터를 활용한 분류 _ 356 

베이지안 필터란? _ 356 

나이브 베이즈 분류 알고리즘 _ 357 

베이지안 필터 라이브러리 _ 359 

03 이동 평균을 이용한 예측과 그래프 작성 _ 364 

수요 예측에 관하여 _ 364 

단순 이동 평균에 관하여 _ 365 

지수 평활법에 관하여 _ 374 

04 채팅 봇과 대화하기 _ 379 

채팅 봇 _ 379 

여기서 만들 채팅 봇 _ 380 

05 서포트 벡터 머신으로 문자 인식(전편) _ 395 

서포트 벡터 머신이란? _ 395 

문자 인식에 도전 _ 397 

06 서포트 벡터 머신으로 문자 인식(후편) _ 409 

node-svm 사용법 _ 409 

손으로 쓴 문자를 인식하는 프로그램 만들기 _ 411 

잘못 인식하는 문제 해결 _ 420 


제8장 데이터 시각화와 응용 427 

01 구글 차트를 이용한 차트 작성 _ 428 

구글 차트란? _ 428 

파이 차트 그리기 _ 429 

막대 그래프 그리기 _ 432 

선 그래프 그리기 _ 434 

차트의 종류와 매뉴얼 _ 437 

02 D3.js로 자유도 높은 차트 작성 _ 440 

D3.js ― 데이터 기반 도큐먼트 생성 라이브러리 _ 440 

D3.js 설치 _ 441 

막대 그래프 그리기 _ 442 

막대 그래프의 스케일 자동 계산 _ 445 

막대 그래프에 눈금 그리기 _ 446 

꺾은선 그래프 그리기 _ 449 

03 D3.js로 지도 그리기 _ 455 

지도 정보 그리기 _ 455 

TopoJSON으로 지도 데이터 표시 _ 456 

지도 데이터 내려받기 _ 456 

데이터 형식 변환 _ 457 

D3.js로 대한민국 지도 그리기 _ 459 

04 D3.js에서 파생된 라이브러리 _ 463 

D3.js를 기반으로 개발된 라이브러리 _ 463 

NVD3.js에 관하여 _ 464 

C3.js 사용하기 _ 469 


부록1 윈도우나 Mac OS X에 개발 환경 구축 475 

Node.js 설치 _ 476 

Rhino 설치 _ 478 

Nashorn 설치 _ 480 


부록2 HTML/XML의 PATH 파싱을 간단하게 수행 483 

테이블 내의 정보 가져오기 _ 489 

cheerio 마무리 _ 490


[예스24 제공]




* * *


기술서적은 일본저자가 잘 쓰는것 같다.

이해하기 쉽게 써 있어서 추천함