Upload
jongwon
View
273
Download
1
Embed Size (px)
Citation preview
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
Source
•https://github.com/lastone9182/gdg-devfest-crawl-171021