python mysql을 활용한 대용량 데이터 수집

Post on 22-Jan-2018

268 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

GDG�DevFestPython/MySQL을�활용한�대용량�데이터�수집

최�종�원Data�Engineer�

github.com/lastone9182�

notes.jongwony.com

Intro

­�Jongwon�Choi

“학습이�되지�않은�인공지능은�갓난아기나�다름없다.”�

환경에�따라�성장한�사람의�성격이�다르고�좋은�요리는�좋은�재료가�만들어내듯�

데이터의�양과�질에�따라�분석�결과가�달라질�수�있습니다.

문화가�진화하기�위해서는�“실패하는”�행동은�사라지고�“성공적인”행동들이�모방된다는�것이�전부입니다.

게임이론:�상호작용을�통한�진화

데이터가�있어야�분석을�하고�학습을�하지

MNIST�데이터는�어떻게�만들어졌나?

데이터는 하늘에서 떨어진 것이 아닙니다.

이런�데이터들이�모여

이렇게�압축된�데이터를�

웹에서�가져옵니다

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/learn/python/learn/datasets/mnist.py

예제는 실제로 정제되고 압축된 데이터를 대상으로 합니다.

어떻게�수집할�것인가

파일,�이미지,�음성�등의�데이터를�API,�웹페이지�등을�통해서�

데이터�셋으로�얻는�형태와�방법은�매우�다양합니다하나의�프로그램으로�모든�상황을�해결해�주진�않습니다.

적어도�투자한�비용�및�시간의�효율을�생각하면�말이죠…

블로그/게시판�크롤링

How�To

•주의사항�

•설계�

•Selenium�Headless�

•수집을�위한�데이터베이스�사용법�

•AWS로�병렬�수집하기�

•Appendix

주의사항크롤링에�정답은�없습니다만…

크롤링의�합법성창과�방패는�상대를�모르는�쪽이�지기�마련입니다

타이밍(sleep)이�가장�중요합니다

서버가�로그분석하는�것이�빠를까요�우리가�코딩을�끝내는�것이�빠를까요

설계탁상공론을�시작해�봅시다

설계�시�고려할�점

•에러캐치�

•단순하게�

•복잡하게

에러캐치

•Critical�

•Unknown�

•이�외에는�발견될�때마다�잡아줍니다

단순하게닭�잡는�데�소�잡는�칼을�쓸�필요는�없습니다

Basic�Step(page)

Request

Query

Basic�Step(depth)

Request

Query

Each row

복잡하게병렬수집은�돈이�많이�듭니다

Key�Point

Query

Each row(?)

Hadoop을�사용하거나�Queue를�사용하는�등�여러가지�병렬�수집�방법이�있지만

데이터베이스�성질로�접근해�보았습니다.

Quiz!

Atomicity�Consistency�Isolation�Durability

Atomicity�Consistency�Isolation�Durability

모두�중요하지만…

데이터�무결성데이터를�정확하게�가져왔는지�가져온�데이터에�중복은�없는지

이제�구현을�해봅시다

SeleniumThe�Automates�browsers

웹�테스트�목적�→�웹�자동화�도구

Example

Chrome�headless

•Chrome�웹�드라이버를�사용�

•headless�옵션�GUI�환경이�아니어도�실행�가능�

•800x600�가상�모니터를�만들고(Xvfb)�같은�작업을�합니다

Ajax�요청도�가능합니다

병렬�수집언제�다�수집하나…

데이터베이스�Lock데이터베이스를�공유�자료구조로

Isolation�Level

•READ�UNCOMMITTED�

•READ�COMMITTED�

•REPEATABLE�READ�-�MySQL�default�

•SERIALIZABLE�-�병렬�수집에�사용

STATUS�columnNULL�pending�OK

Key�Point

URL STATUSurl 1 OKurl 2 OKurl 3 pendingurl 4 pendingurl 5 pendingurl 6url 7url 8… …

Query

Each row

컬럼�수와�에러�발생율은�비례합니다

SELECT�FOR�UPDATE트랜잭션�종료�시까지�다른�세션은�SELECT�불가

잘못�사용하면�독이�됩니다

EXAMPLE

Amazon�Web�Services20개의�인스턴스와�하나의�데이터베이스�

IAM�EC2�RDS

Boto3클라우드를�한낱�리모컨으로

Basic�Step

•IAM을�통해�아마존�서비스를�프로그래밍으로�다루는�권한을�부여�

•Python�Boto3�라이브러리로�제어�

•GitHub�README를�참조하세요�

•https://github.com/lastone9182/gdg-devfest-crawl-171021

Crontab만�자동화가�아닙니다

•부팅�시�실행되는�스크립트�rc.local,�서비스�systemd�

•중앙�인스턴스�1개가�나머지�인스턴스를�알아서�제어하는�마법�

•IP가�부팅�시마다�바뀌는�건�덤!

Instance�Control

Central Auxiliaryon/off

Appendix시간이�남을�것�같아서�TIP을�준비해�봤습니다.

Web�Element�선택⌘(Ctrl)�+�⇧(Shift) + C + (Click)

→ Copy Selector, Xpath

수집하면서�분석하려�하지�마세요

데이터의�추출은�최소화�페이지�전체를�저장�후�파싱

중복,�GroupBy,�Join…�가공된�데이터가�아닌데�

데이터베이스에서�조인하신다구요?

Pandas!

SELECT�쿼리로�전부�가져온�다음�가공해서�새�테이블로�저장하는�것을�추천합니다

스키마를�건드리는�순간�쿼리문,�머리,�코딩이�복잡해집니다…

전처리가�중요합니다.데이터를�잘�가져오는�지�꾸준히�확인해�보세요

버그�예방의�지름길

라이브러리에�함정코드가?

Tesseract�OCR�https://github.com/madmaze/pytesseract/pytesseract.py

텔레그램�봇,�슬랙�봇데이터�수집�알림의�혁명

Summary

RequestList

URL STATUS

URL HTML

크롤링에�정답은�없습니다

데이터�분석은�이제�시작입니다

새로운�기술이�쏟아져도�결국�기초�위에서�이루어진�것들입니다.

감사합니다.

Reference

•게임이론:�신뢰의�진화�

•Tensorflow�github�

•Web�Scraping�with�Python�

•Innodb�transaction�isolation�levels�

•Boto3�docs�

•사용된�Icon

top related