Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python

Beomi
August 19, 2017

GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python

GDG Campus SummerParty (2017)의 <쓸데많은 웹 크롤러 만들기 with Python> 세션 발표자료입니다.

Beomi

August 19, 2017
Tweet

More Decks by Beomi

Other Decks in Technology

Transcript

  1. GDG Campus Summer Party 쓸데많은 웹 크롤러 만들기 with Python

    이준범 ( [email protected] ) GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 1
  2. 발표자 소개 이준범 ( [email protected] ) DjangoGirls Seoul Organizer <

    나만의 웹 크롤러> 블로그 연재 < 파이썬을 활용한 실전 웹크롤링 CAMP> 패스트캠퍼스 강의 Python + Django = <3 파이썬쓰세요 두번쓰세요 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 2
  3. 인터넷 & 웹에 있는 유용한 정보를 가져오고 사용하기 쉬운 형태로

    가공하자 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 4
  4. 오늘 다루는 내용 가장 기초적인 것 X 크롤링하기 좀더 까다로운

    사례 O 코드 나열 X , 사례 + 해결법 O CS101 아니라 CS201 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 5
  5. HTTP ? HTML ? JSON ? API ? GDG Campus

    SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 7
  6. 사용하는 도구 python v3.6 (CPython 을 사용합니다.) requests v2.18 HTTP

    Request beautifulsoup v4.6 HTML to Python Object lxml v3.8 HTML(XML) Parser selenium v3.5 Browser Control pip 로 설치하면 됩니다 pip install requests bs4 lxml selenium # 한번에 전부 설치하기 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 8
  7. User-Agent 체크를 하는 경우 ex) 온OO 믹스 GDG Campus SummerParty:

    쓸데많은 웹 크롤러 만들기 with Python 11
  8. HTTP 요청을 보낸 대상이 어떤 클라이언트( 브라우저) 인지 확인 GDG

    Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 13
  9. HTTP Header 에 모던 브라우저의 User-Agent 값 넣기 GDG Campus

    SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 18
  10. 크롬을 넣으면 보통 잘 동작한다 import requests s = requests.Session()

    s.headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) '\ 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' } 만약 내가 쓰는 브라우저의 속성을 알고싶다면: 구글에 My User Agent 검색 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 19
  11. ( 로그인 등에서) hidden input eld 가 있는 경우 ex)

    온OO 믹스 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 21
  12. 온OO 믹스 로그인 Form proc returnUrl email pw ... 어떤게

    진짜? GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 23
  13. CSRF 검증이 들어간 경우 ex) 클O 앙 GDG Campus SummerParty:

    쓸데많은 웹 크롤러 만들기 with Python 25
  14. 똑똑.. 쿠키에 있는 토큰이랑 input 에 있는 토큰 주세요 그런거

    없는데요... GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 26
  15. 한 Requests Cycle 안이라면 세션을 유지하고 HTML 에서 토큰을 뽑아내면

    되겠다 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 30
  16. CSRF 토큰이 있는 페이지에서 토큰 추출 & 세션유지 with requests.Session()

    as s: first_page = s.get('https://www.clien.net/service') html = first_page.text soup = bs(html, 'lxml') csrf = soup.find('input', {'name': '_csrf'}) LOGIN_INFO = { 'userId': 'myidid', 'userPassword': 'mypassword123' '_csrf': csrf['value'] } login_req = s.post( 'https://www.clien.net/service/login', data=LOGIN_INFO ) GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 31
  17. 너무 빨리( 많이) 요청했더니... ex) 조O 라 GDG Campus SummerParty:

    쓸데많은 웹 크롤러 만들기 with Python 33
  18. 사실 사람이 1 초에 많이 넘겨봤자 두개~ 세개 페이지 GDG

    Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 35
  19. 랜덤하게 쉬어줍시다 time.sleep(3 + random.random() * 3) 3 ~ 6

    초 안에서 랜덤하게 쉬어줍니다 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 39
  20. 요즘 인기 많은 SPA ...까지는 아니더라도 JS 로 동적 DOM

    변경이 일어나는 경우 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 41
  21. 결국은 클라이언트 렌더링이 필요 크롬은( 뚠뚠) 오늘도( 뚠뚠) 열심히 일을

    하네( 뚠뚠) GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 44
  22. Selenium 써보기 from selenium import webdriver driver = webdriver.Chrome('/Users/ 사용자이름/Downloads/chromedriver')

    driver.implicitly_wait(3) driver.get('https://naver.com') # requests 의 .text( 소스보기) 와 다르게 브라우저의 Elements 탭과 동일한 DOM html = driver.text 브라우저에 렌더링된 DOM 구조와 동일 ( 화면에 나타나지 않는 것 ( 렌더링 되지 않은것) 은 가져올 수 없음) GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 46
  23. 캡챠 뚫는 API 를 사용하거나 캡챠가 뜨면 사람이 클릭하도록 돌리거나

    Sikuli같은 이미지 인식을 돌리거나 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 49
  24. 진짜 사람도 25% 나 걸린다는 Recaptcha 가게 표지판좀 그만좀 GDG

    Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 50
  25. 일정 수준 이상으로 빡세게 돌리거나 상업적 용도가 있다면 일단 서버

    운영자나 개발자에게 물어봅시다 GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 52
  26. 이미지 출처 18p, 23p 너 차단: http://blackhole-kun.tistory.com/2004 22p 탐험가맛 쿠키:

    http://bbs.ruliweb.com/best/board/300064/read/25114064 35p 랜덤게임: https://play.google.com/store/apps/details? id=com.rectworks.randomgame 39p 안알랴줌: 다음 Storyball GDG Campus SummerParty: 쓸데많은 웹 크롤러 만들기 with Python 56