ݺߣ

ݺߣShare a Scribd company logo
0 
Python 
Web Crawler 
Development 
인천대학교 OneScore 
200901319 최창원
1 
INDEX. 
1 2 3 4 
발표 
소개 
파이썬 
소개 
크롤러 
소개 
다운로더 
&스크래퍼 
5 
다음 
로그인 
6 
마무리 
으리
2 
발표 소개 1
3 
파이썬이 뭔대? 
거대하고 자동화된 크롤러를 제작하는 방법은 아닌 
웹 크롤러를 만드는데 필요한 기초지식 전달 
팬텀JS 사용? 
소스코드 설명, 실습위주의 진행 
오늘 할 내용
1991년 
귀도 반 로섬에 의해 탄생 
문법이 쉽고 직관적이다. 
built-in 라이브러리가 많아 
할 수 있는게 매우 많다. 
크로스 플랫폼을 지원한다. 
4 Why Python?
인터프리터위에서 실행된다. 
C와 Java와 다른 
동적 타이핑을 사용한다. 
강력한 리플렉션이 가능하다. 
5 Feature
<모 Naver 카페> 
6 Web Crawler
<스포츠 기사> 
7 Web Crawler
<뉴스 기사> 
8 Web Crawler
World Wide Web을 통해 주고 받는 정보를 수집하는 
자동화 소프트웨어 
주로 다음과 같은 곳에 사용할 수 있습니다. 
• 기계학습 소프트웨어 개발 시 데이터를 수집할 경우 
• 검색엔진을 위해 문서를 수집 할 경우 
• 프로젝트에 필요한 컨텐츠를 수집할 때 
• 개인적으로 필요한 정보를 주기적으로 수신 받고 싶을 때 
9 Web Crawler
10 Search Engine
1) HTTP 
Requests 
(GET, POST) 
2) HTTP 
Response 
(HTML, Javacript, 
ETC Files) 
Web Server 
11 Web Crawler
<hi-bogo.net 메인 페이지 접속 했을 때> 
12 HTTP GET (Request)
<hi-bogo.net 로그인 할 때> 
13 HTTP POST (Request)
<http://news.naver.com/main/search/search.nhn?query=%B1%B8%B1%DB&x=0&y=0> 
<HTML - 계층구조> 
14 HTML (Response)
15 
https://play.google.com/store/apps/details?id=com.kakao.talk&hl=ko 
HTML + AJAX!!? 
(Response)
Requests 
• 간편하고 쉬운 메서드 
• HTTP 프로토콜 조작이 쉬움 
• SSL 걱정 ㄴㄴ 
BeatifulSoup4 
• HTML 파싱 트리 생성 
• HTML 검색 및 순회(네비게이팅)가 쉬움 
참고 
http://pythonhackers.com/open-source/ 
http://www.crummy.com/software/BeautifulSoup/bs4/doc/ 
http://docs.python-requests.org/en/latest/ 
16 Python Modules
17 
네이버 인기 검색어 크롤링 
ㄱㄱ
18 
#-*- encoding: utf-8 -*- 
#실시간 검색어 
import requests as rs 
import bs4 
def getTopRank(): 
naver_url = 'http://www.naver.com' 
#1)요청 
response = rs.get(naver_url) 
#2)응답으로 부터 HTML 추출 
html_content = response.text.encode(response.encoding); 
............ 
Requests 예제 
(네이버 인기 검색어)
19 
............ 
BeautifulSoup 예제 
#2)응답으로 부터 HTML 추출 
html_content = response.text.encode(response.encoding); 
#3)HTML 파싱 
navigator = bs4.BeautifulSoup(html_content) 
#4)네비게이터를 이용해 원하는 태그 리스트 가져오기 
realRankTag = navigator.find_all(id='realrank') 
resultList = realRankTag[0].find_all('a') 
#5)키워드 추출 
keywords = [item['title'] for item in resultList] 
#6)키워드 출력 
for index, keyword in enumerate(keywords): 
resultText = '[%d위] %s'%(index,keyword.encode('utf-8')) 
print resultText.decode('utf-8').encode('euc-kr')
20 
네이버 인기 검색어 
크롤링 실습 
https://github.com/qwefgh90/Web_Crawler 
naverTopRank.py
21 
게시판 문서 다운로더 
ㄱㄱ
• 다운받을 파일이 너무 많아 일일히 클릭하기 지치고 힘들 때 ! 
• 배운거 활용해보고 싶을 때 
• 잉여로울 때 
사실 그다지 쓸모는 없습니다... 
22 게시판 문서 다운로더
구현 절차 
1. 파일 다운로드를 요청하는 부분을 분석 
2. 똑같은 헤더와 페이로드를 만들어서 똑같은 요청을 다시 보내본다. 
3. 요청한 파일이 응답에 제대로 담겨있는지? 
HTTP 응답코드가 200인지 확인? 
4. 파일로 저장한다. 
23 게시판 문서 다운로더
24 
게시판 문서 다운로더 
실습 
https://github.com/qwefgh90/Web_Crawler 
delphi_downloader.py
25 
그러나 항상 이처럼 
쉬운 것은 아닙니다...!
• 자바스크립트에 크롤링 할 내용이 숨겨져 있다면? (멜론 크롤링) 
• 분석해봤지만 스크립트가 단순하지 않을 때? (네이버 로그인) 
• 브라우저에서 매크로 돌리듯이 사용하고 싶을 때!! 
26 The power of browsers
실제 브라우저를 사용해서 크롤링 해보자. 
이때 Headless Browser인 PhantomJS는 매우 유용하다. 
파이썬에서 PhantomJS를 다루기 위해선 Selenium 모듈이 필요하다. 
PhantomJS 란 ? 
웹 표준을 따르는 headless Webkit 이다. 자바스크립트를 사용할 수 있으며 DOM, CSS, 
JSON, SVG등을 컨트롤 할 수 있다. 
Selenium 이란 ?? 
브라우저와 드라이버로 연결되어 브라우저에서 하는 작업들을 자동화 시킬 수 있다. 
selenium은 웹 인터페이스로 동작하며 많은 브라우저가 selenium과 호환이 되고 
PhantomJS와도 호환이 된다. 
27 Browser
Phantomjs.exe 
WebDriver 
Resources 
Web Server 
Browsing 
28 Crawler with browser
29 
네이버 로그인 후 세션취득 
https://github.com/qwefgh90/SeleniumSample 
crawler.py
30 
감사합니다.

More Related Content

141118 최창원 웹크롤러제작

  • 1. 0 Python Web Crawler Development 인천대학교 OneScore 200901319 최창원
  • 2. 1 INDEX. 1 2 3 4 발표 소개 파이썬 소개 크롤러 소개 다운로더 &스크래퍼 5 다음 로그인 6 마무리 으리
  • 4. 3 파이썬이 뭔대? 거대하고 자동화된 크롤러를 제작하는 방법은 아닌 웹 크롤러를 만드는데 필요한 기초지식 전달 팬텀JS 사용? 소스코드 설명, 실습위주의 진행 오늘 할 내용
  • 5. 1991년 귀도 반 로섬에 의해 탄생 문법이 쉽고 직관적이다. built-in 라이브러리가 많아 할 수 있는게 매우 많다. 크로스 플랫폼을 지원한다. 4 Why Python?
  • 6. 인터프리터위에서 실행된다. C와 Java와 다른 동적 타이핑을 사용한다. 강력한 리플렉션이 가능하다. 5 Feature
  • 7. <모 Naver 카페> 6 Web Crawler
  • 8. <스포츠 기사> 7 Web Crawler
  • 9. <뉴스 기사> 8 Web Crawler
  • 10. World Wide Web을 통해 주고 받는 정보를 수집하는 자동화 소프트웨어 주로 다음과 같은 곳에 사용할 수 있습니다. • 기계학습 소프트웨어 개발 시 데이터를 수집할 경우 • 검색엔진을 위해 문서를 수집 할 경우 • 프로젝트에 필요한 컨텐츠를 수집할 때 • 개인적으로 필요한 정보를 주기적으로 수신 받고 싶을 때 9 Web Crawler
  • 12. 1) HTTP Requests (GET, POST) 2) HTTP Response (HTML, Javacript, ETC Files) Web Server 11 Web Crawler
  • 13. <hi-bogo.net 메인 페이지 접속 했을 때> 12 HTTP GET (Request)
  • 14. <hi-bogo.net 로그인 할 때> 13 HTTP POST (Request)
  • 17. Requests • 간편하고 쉬운 메서드 • HTTP 프로토콜 조작이 쉬움 • SSL 걱정 ㄴㄴ BeatifulSoup4 • HTML 파싱 트리 생성 • HTML 검색 및 순회(네비게이팅)가 쉬움 참고 http://pythonhackers.com/open-source/ http://www.crummy.com/software/BeautifulSoup/bs4/doc/ http://docs.python-requests.org/en/latest/ 16 Python Modules
  • 18. 17 네이버 인기 검색어 크롤링 ㄱㄱ
  • 19. 18 #-*- encoding: utf-8 -*- #실시간 검색어 import requests as rs import bs4 def getTopRank(): naver_url = 'http://www.naver.com' #1)요청 response = rs.get(naver_url) #2)응답으로 부터 HTML 추출 html_content = response.text.encode(response.encoding); ............ Requests 예제 (네이버 인기 검색어)
  • 20. 19 ............ BeautifulSoup 예제 #2)응답으로 부터 HTML 추출 html_content = response.text.encode(response.encoding); #3)HTML 파싱 navigator = bs4.BeautifulSoup(html_content) #4)네비게이터를 이용해 원하는 태그 리스트 가져오기 realRankTag = navigator.find_all(id='realrank') resultList = realRankTag[0].find_all('a') #5)키워드 추출 keywords = [item['title'] for item in resultList] #6)키워드 출력 for index, keyword in enumerate(keywords): resultText = '[%d위] %s'%(index,keyword.encode('utf-8')) print resultText.decode('utf-8').encode('euc-kr')
  • 21. 20 네이버 인기 검색어 크롤링 실습 https://github.com/qwefgh90/Web_Crawler naverTopRank.py
  • 22. 21 게시판 문서 다운로더 ㄱㄱ
  • 23. • 다운받을 파일이 너무 많아 일일히 클릭하기 지치고 힘들 때 ! • 배운거 활용해보고 싶을 때 • 잉여로울 때 사실 그다지 쓸모는 없습니다... 22 게시판 문서 다운로더
  • 24. 구현 절차 1. 파일 다운로드를 요청하는 부분을 분석 2. 똑같은 헤더와 페이로드를 만들어서 똑같은 요청을 다시 보내본다. 3. 요청한 파일이 응답에 제대로 담겨있는지? HTTP 응답코드가 200인지 확인? 4. 파일로 저장한다. 23 게시판 문서 다운로더
  • 25. 24 게시판 문서 다운로더 실습 https://github.com/qwefgh90/Web_Crawler delphi_downloader.py
  • 26. 25 그러나 항상 이처럼 쉬운 것은 아닙니다...!
  • 27. • 자바스크립트에 크롤링 할 내용이 숨겨져 있다면? (멜론 크롤링) • 분석해봤지만 스크립트가 단순하지 않을 때? (네이버 로그인) • 브라우저에서 매크로 돌리듯이 사용하고 싶을 때!! 26 The power of browsers
  • 28. 실제 브라우저를 사용해서 크롤링 해보자. 이때 Headless Browser인 PhantomJS는 매우 유용하다. 파이썬에서 PhantomJS를 다루기 위해선 Selenium 모듈이 필요하다. PhantomJS 란 ? 웹 표준을 따르는 headless Webkit 이다. 자바스크립트를 사용할 수 있으며 DOM, CSS, JSON, SVG등을 컨트롤 할 수 있다. Selenium 이란 ?? 브라우저와 드라이버로 연결되어 브라우저에서 하는 작업들을 자동화 시킬 수 있다. selenium은 웹 인터페이스로 동작하며 많은 브라우저가 selenium과 호환이 되고 PhantomJS와도 호환이 된다. 27 Browser
  • 29. Phantomjs.exe WebDriver Resources Web Server Browsing 28 Crawler with browser
  • 30. 29 네이버 로그인 후 세션취득 https://github.com/qwefgh90/SeleniumSample crawler.py

Editor's Notes

  • #3: 파이썬 소개 – 한 장 소개 크롤러 소개 – HTML, Javascript, DOM, HTTP 활용1 – 웹 사이트 파일 다운로더, 멜론 스크래퍼 제작 활용2 - 네이버 로그인 (팬텀JS)
  • #7: class ClassA(object):     email = ''     name = ''   strong = ClassA() strong.email = 'kelp[at]phate.org' strong.name = 'Kelp'   모듈, 클래스, 객체와 같은 언어의 요소가 내부에서 접근 for name in dir(strong):     attr = getattr(strong.__class__, name)     if not callable(attr) and name.find('__') != 0:         print('%s = %s' % (name, getattr(strong, name)))
  • #8: HTML, Javascript, DOM, HTTP
  • #9: HTML, Javascript, DOM, HTTP
  • #10: HTML, Javascript, DOM, HTTP
  • #11: 굳이 크롤링할 필요 없이 데이터를 제공해주는 기관도 있음
  • #12: HTML, Javascript, DOM, HTTP
  • #13: HTML, Javascript, DOM, HTTP
  • #14: HTML, Javascript, DOM, HTTP
  • #15: HTML, Javascript, DOM, HTTP
  • #16:  HTML은 제목, 단락, 목록 등과 같은 본문을 위한 구조적 의미를 나타내는 것뿐만 아니라 링크, 인용과 그 밖의 항목으로 구조적 문서를 만들 수 있는 방법을 제공한다.
  • #17: HTML, Javascript, DOM, HTTP
  • #18: HTML, Javascript, DOM, HTTP
  • #19: 간단한 예제 시연1
  • #20: 간단한 예제 시연1
  • #21: 간단한 예제 시연1
  • #22: 간단한 예제 시연1
  • #23: 간단한 예제 시연1
  • #24: 간단한 예제 시연1
  • #25: 간단한 예제 시연1
  • #26: 간단한 예제 시연1
  • #27: 간단한 예제 시연1
  • #28: HTML, Javascript, DOM, HTTP
  • #29: HTML, Javascript, DOM, HTTP
  • #30: HTML, Javascript, DOM, HTTP
  • #31: 간단한 예제 시연1