SlideShare ist ein Scribd-Unternehmen logo
1 von 26
웹 크롤링 Web Scraping
의 이해와 활용
이민철
다루는 내용
1. 웹 크롤링
 웹 크롤링 이란?
 크롤링은 어디에 쓰일까
2. Web의 이해
 Web page
 서버와 클라이언트
 웹 페이지가 우리 눈에 보이기까지
 HTTP
 Python으로 HTTP request 보내기
3. 파싱 (parsing)
 re
 BeautifulSoup
4. How to make 크롤러
 크롤링하는 여러가지 방법
 Selenium
 requests
 scrapy
1
2
3
4
웹 크롤링 Web Scraping
웹 사이트에서 원하는 정보를 자동으로 수집하는 것
크롤링은 어디에 쓰일까
크롤링 왜??
구글
수 많은 웹 사이트
를 크롤링하여 검
색서비스 제공
쿠차
각종 소셜커머스 사이트
를 크롤링 하여 최저가
정보 제공
지진희알림
각종 커뮤니티에서 지진에 관련된 글
을 수집하여 지진 발생시 텔레그램으
로 알림
Web 의 이해
주소창에
www.naver.com
를 치면 어떤 일
이 일어날까
웹 페이지 Web page
• 웹 상의 문서
• 우리가 보고 있는 웹 사이트들은 문서로 이루어져 있다.
• 텍스트, 그림, 소리, 동영상 등을 표현 가능
• 대부분 HTML 이라는 언어로 이루어져 있음
서버와 클라이언트
Client
• 서비스를 요청하는 프로그램
Server
• 요청에 대해 응답을 해주는 프로그램
응답
요청
웹 페이지가 우리 눈에 보이기 까지
1. 클라이언트가 서버에게 contents를 요청한다.
2. 서버는 요청 받은 contents를 클라이언트에게 건네준다.
3. 브라우저는 서버에게 받은 HTML을 해석하여 화면에 보여준다.
요청
응답
해석
HTTP Hyper Text Transfer Protocol
• 서버와 클라이언트 사이에서 정보를 주고 받기 위한 규약
• 시작줄, 헤더(Header), 본문(Body) 으로 이루어져 있음
• 9개의 메소드가 존재하지만 주로 GET과 POST만 쓰인다.
GET POST
• Body에 query data가 들어간다.
• 링크 / 북마크가 불가능하다.
• 데이터 길이에 제한이 없다.
• URL을 가지지 않으므로 주로 중요한 데이
터를 다룰 때 사용한다.
• Body 없이 Header만으로 전송된다.
• 링크 / 북마크 가 가능하다.
• 요청에 길이 제한이 있다.
• URL의 ? 뒤에 쿼리 문자열이 올 수 있다.
• 쿼리 문자열은 key와 value를 가지고 있
으며, 각 쿼리는 & 로 구분한다.
/test/demo_form.php?name1=value1&name2=value2
Python 으로 HTTP request 보내기
• urllib
 Python built-in module
 간편하게 HTTP request를 보낼 수 있음
 로그인 및 세션을 유지하기가 번거로움
• mechanize
 urllib 기반
 세션을 유지하기가 용이함
 간편하게 html form을 채우고 submit을 보낼 수 있음
 Python2 만 지원
• requests
 간편하게 HTTP request를 보낼 수 있음
 세션을 유지하기가 용이함
 python2 / python3 완벽 지원
 코드가 간결하고 documentation이 잘 되어 있음
requests 설치
• Pip 로 설치 가능
pip install requests
requests로 HTTP request 보내기
GET
import requests
url = "https://www.naver.com/"
response = requests.get(url)
print(response.text)
POST
import requests
url = "https://httpbin.org/post"
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, data)
print(response.text)
파싱 (parsing)
• 가공되지 않은 문자열에서 필요한 부분을 추출하여 의미있는
(구조화된) 데이터로 만드는 과정
정규표현식 regular expression
• 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용
• Python 에서는 re라는 이름의 built-in module 이 존재
문자 클래스 설명
d 숫자와 매치 ; [0-9]
w 문자 + 숫자와 매치
. n를 제외한 모든 문자와 매치
+ (반복) + 바로 앞에 있는 문자가 1번 이상 반복됨
* (반복) * 바로 앞에 있는 문자가 0번 이상 반복됨
자주 사용되는 정규식
<a href="/watch?v=d9IxdwEFk1c" class="yt-uix-tile-link yt-ui-ellipsis
yt-ui-ellipsis-2 polymer-title-link yt-uix-sessionlink spf-link " data-
sessionlink="itct=CF0Q3DAYACITCLunmMmludMCFQbTWAod-
eQDIyj0JFIJ7JWE7J207Jyg" title="[MV] IU(아이유) _ Palette(팔레트)
(Feat. G-DRAGON)" rel="spf-prefetch" aria-describedby="description-
id-746662" dir="ltr">[MV] IU(아이유) _ Palette(팔레트) (Feat. G-
DRAGON)</a>
<a href="(.+?)".*title="(.+?)".*>pattern
text
Beautiful Soup
https://www.crummy.com/software/BeautifulSoup/
• 파싱을 도와주는 강력한 python 라이브러리
• 정규식을 작성할 필요 없이 tag, id, class 등의 이름으로 쉽게 파
싱 가능
• 쉽고 간결하며, documentation이 매우 잘 되어 있음
<a href="/watch?v=d9IxdwEFk1c" class="yt-uix-tile-link yt-ui-ellipsis
yt-ui-ellipsis-2 polymer-title-link yt-uix-sessionlink spf-link " data-
sessionlink="itct=CF0Q3DAYACITCLunmMmludMCFQbTWAod-
eQDIyj0JFIJ7JWE7J207Jyg" title="[MV] IU(아이유) _ Palette(팔레트)
(Feat. G-DRAGON)" rel="spf-prefetch" aria-describedby="description-
id-746662" dir="ltr">[MV] IU(아이유) _ Palette(팔레트) (Feat. G-
DRAGON)</a>
text
Beautiful Soup 설치
• Pip 로 설치 가능
pip install beautifulsoup4
How to make 크롤러
1. 브라우저를 조종하여 데이터를 얻는 방법
• Selenium
• 브라우저를 직접 띄우기 때문에 css나 image와 같이 구지 필요 없는
데이터도 다운로드 받게 됨 -> 속도가 느리다.
• 동적 페이지도 크롤링이 가능하다. (javascript 실행 가능)
2. HTTP request를 날려서 데이터를 얻는 방법
• requests, scrapy
• 속도가 빠르다.
• Javascript 실행이 불가능함 -> Web page에 대한 사전 분석이 필요하
다.
Selenium
• 웹 브라우저 자동화 tool
• Java, C#, Perl , PHP, Python , Ruby 등 다양한 언어 지원
• 직접 브라우저를 실행하여 python code로 mouse click,
keyboard input 등의 event를 발생시킴
• 실제 브라우저로 실행한 것과 동일한 값을 얻을 수 있음
• 엄청 느림
Scrapy
• 링크를 타고 다른 페이지로 이동하며 scraping 하는 web spider
제작에 용이
• Django 처럼 프로젝트를 생성하면 기본 템플릿을 생성해줌
• 이 역시 documentation이 굉장히 잘 되어 있다.
https://docs.scrapy.org/en/latest/
scrapy startproject 프로젝트명

Weitere ähnliche Inhalte

Was ist angesagt?

슬라이드쉐어
슬라이드쉐어슬라이드쉐어
슬라이드쉐어sungminlee
 
The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)Eunjeong (Lucy) Park
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)Seongyun Byeon
 
Web API: The Good Parts 落穂ひろい
Web API: The Good Parts 落穂ひろいWeb API: The Good Parts 落穂ひろい
Web API: The Good Parts 落穂ひろいAPI Meetup
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Web Services Korea
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017Taehoon Kim
 
Web Cache Deception Attack
Web Cache Deception AttackWeb Cache Deception Attack
Web Cache Deception AttackOmer Gil
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비인서 박
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころMasayuki Wakizaka
 
devops 2년차 이직 성공기.pptx
devops 2년차 이직 성공기.pptxdevops 2년차 이직 성공기.pptx
devops 2년차 이직 성공기.pptxByungho Lee
 
WebSocketプロトコル
WebSocketプロトコルWebSocketプロトコル
WebSocketプロトコルDaniel Perez
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우jieunsys
 

Was ist angesagt? (20)

슬라이드쉐어
슬라이드쉐어슬라이드쉐어
슬라이드쉐어
 
The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)The beginner’s guide to 웹 크롤링 (스크래핑)
The beginner’s guide to 웹 크롤링 (스크래핑)
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 
Web API: The Good Parts 落穂ひろい
Web API: The Good Parts 落穂ひろいWeb API: The Good Parts 落穂ひろい
Web API: The Good Parts 落穂ひろい
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
 
Web Cache Deception Attack
Web Cache Deception AttackWeb Cache Deception Attack
Web Cache Deception Attack
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころ
 
devops 2년차 이직 성공기.pptx
devops 2년차 이직 성공기.pptxdevops 2년차 이직 성공기.pptx
devops 2년차 이직 성공기.pptx
 
WebSocketプロトコル
WebSocketプロトコルWebSocketプロトコル
WebSocketプロトコル
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 

Andere mochten auch

Fiddler 피들러에 대해 알아보자
Fiddler 피들러에 대해 알아보자Fiddler 피들러에 대해 알아보자
Fiddler 피들러에 대해 알아보자용진 조
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나종민 김
 
Web Crawler 고군분투기
Web Crawler 고군분투기Web Crawler 고군분투기
Web Crawler 고군분투기richellin
 
웹크롤러 조사
웹크롤러 조사웹크롤러 조사
웹크롤러 조사rupert kim
 
[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑neuroassociates
 
6장 지능형 웹 크롤링
6장 지능형 웹 크롤링6장 지능형 웹 크롤링
6장 지능형 웹 크롤링Chanil Kim
 
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼Cheol Kang
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Jeong-gyu Kim
 
Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기Gyuhyeon Jeon
 
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁에디티지(Editage Korea)
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작Changwon Choe
 

Andere mochten auch (11)

Fiddler 피들러에 대해 알아보자
Fiddler 피들러에 대해 알아보자Fiddler 피들러에 대해 알아보자
Fiddler 피들러에 대해 알아보자
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
Web Crawler 고군분투기
Web Crawler 고군분투기Web Crawler 고군분투기
Web Crawler 고군분투기
 
웹크롤러 조사
웹크롤러 조사웹크롤러 조사
웹크롤러 조사
 
[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑[Week2] 데이터 스크래핑
[Week2] 데이터 스크래핑
 
6장 지능형 웹 크롤링
6장 지능형 웹 크롤링6장 지능형 웹 크롤링
6장 지능형 웹 크롤링
 
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
[PyConKR 2014] 30분만에 따라하는 동시성 스크래퍼
 
Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)Node.js를 활용한 웹 크롤링(Crawling)
Node.js를 활용한 웹 크롤링(Crawling)
 
Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기Selenium을 이용한 동적 사이트 크롤러 만들기
Selenium을 이용한 동적 사이트 크롤러 만들기
 
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 

Ähnlich wie 웹 크롤링 (Web scraping) 의 이해

2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기Jay Park
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)jeongseokoh
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요dgmit2009
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01SangHun Lee
 
웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSSYu Yongwoo
 
생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)SeungYong Baek
 
2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기Jay Park
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTPNAVER D2
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처dgmit2009
 
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Platform
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introductionJinkyoung Kim
 
WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징trustinlee
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)DK Lee
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10Chanjin Park
 

Ähnlich wie 웹 크롤링 (Web scraping) 의 이해 (20)

Restful API guide
Restful API guideRestful API guide
Restful API guide
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01
 
웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS
 
생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)
 
2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기2021년 3월 6일 개발자 이야기
2021년 3월 6일 개발자 이야기
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
 
Websocket
WebsocketWebsocket
Websocket
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
 
WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
 

웹 크롤링 (Web scraping) 의 이해

  • 1. 웹 크롤링 Web Scraping 의 이해와 활용 이민철
  • 2. 다루는 내용 1. 웹 크롤링  웹 크롤링 이란?  크롤링은 어디에 쓰일까 2. Web의 이해  Web page  서버와 클라이언트  웹 페이지가 우리 눈에 보이기까지  HTTP  Python으로 HTTP request 보내기 3. 파싱 (parsing)  re  BeautifulSoup 4. How to make 크롤러  크롤링하는 여러가지 방법  Selenium  requests  scrapy 1 2 3 4
  • 3. 웹 크롤링 Web Scraping 웹 사이트에서 원하는 정보를 자동으로 수집하는 것
  • 5. 구글 수 많은 웹 사이트 를 크롤링하여 검 색서비스 제공
  • 6. 쿠차 각종 소셜커머스 사이트 를 크롤링 하여 최저가 정보 제공
  • 7. 지진희알림 각종 커뮤니티에서 지진에 관련된 글 을 수집하여 지진 발생시 텔레그램으 로 알림
  • 8. Web 의 이해 주소창에 www.naver.com 를 치면 어떤 일 이 일어날까
  • 9. 웹 페이지 Web page • 웹 상의 문서 • 우리가 보고 있는 웹 사이트들은 문서로 이루어져 있다. • 텍스트, 그림, 소리, 동영상 등을 표현 가능 • 대부분 HTML 이라는 언어로 이루어져 있음
  • 10. 서버와 클라이언트 Client • 서비스를 요청하는 프로그램 Server • 요청에 대해 응답을 해주는 프로그램 응답 요청
  • 11. 웹 페이지가 우리 눈에 보이기 까지 1. 클라이언트가 서버에게 contents를 요청한다. 2. 서버는 요청 받은 contents를 클라이언트에게 건네준다. 3. 브라우저는 서버에게 받은 HTML을 해석하여 화면에 보여준다. 요청 응답 해석
  • 12. HTTP Hyper Text Transfer Protocol • 서버와 클라이언트 사이에서 정보를 주고 받기 위한 규약 • 시작줄, 헤더(Header), 본문(Body) 으로 이루어져 있음 • 9개의 메소드가 존재하지만 주로 GET과 POST만 쓰인다.
  • 13. GET POST • Body에 query data가 들어간다. • 링크 / 북마크가 불가능하다. • 데이터 길이에 제한이 없다. • URL을 가지지 않으므로 주로 중요한 데이 터를 다룰 때 사용한다. • Body 없이 Header만으로 전송된다. • 링크 / 북마크 가 가능하다. • 요청에 길이 제한이 있다. • URL의 ? 뒤에 쿼리 문자열이 올 수 있다. • 쿼리 문자열은 key와 value를 가지고 있 으며, 각 쿼리는 & 로 구분한다. /test/demo_form.php?name1=value1&name2=value2
  • 14.
  • 15. Python 으로 HTTP request 보내기 • urllib  Python built-in module  간편하게 HTTP request를 보낼 수 있음  로그인 및 세션을 유지하기가 번거로움 • mechanize  urllib 기반  세션을 유지하기가 용이함  간편하게 html form을 채우고 submit을 보낼 수 있음  Python2 만 지원 • requests  간편하게 HTTP request를 보낼 수 있음  세션을 유지하기가 용이함  python2 / python3 완벽 지원  코드가 간결하고 documentation이 잘 되어 있음
  • 16. requests 설치 • Pip 로 설치 가능 pip install requests
  • 17. requests로 HTTP request 보내기 GET import requests url = "https://www.naver.com/" response = requests.get(url) print(response.text) POST import requests url = "https://httpbin.org/post" data = {'key1': 'value1', 'key2': 'value2'} response = requests.post(url, data) print(response.text)
  • 18. 파싱 (parsing) • 가공되지 않은 문자열에서 필요한 부분을 추출하여 의미있는 (구조화된) 데이터로 만드는 과정
  • 19. 정규표현식 regular expression • 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용 • Python 에서는 re라는 이름의 built-in module 이 존재 문자 클래스 설명 d 숫자와 매치 ; [0-9] w 문자 + 숫자와 매치 . n를 제외한 모든 문자와 매치 + (반복) + 바로 앞에 있는 문자가 1번 이상 반복됨 * (반복) * 바로 앞에 있는 문자가 0번 이상 반복됨 자주 사용되는 정규식
  • 20. <a href="/watch?v=d9IxdwEFk1c" class="yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 polymer-title-link yt-uix-sessionlink spf-link " data- sessionlink="itct=CF0Q3DAYACITCLunmMmludMCFQbTWAod- eQDIyj0JFIJ7JWE7J207Jyg" title="[MV] IU(아이유) _ Palette(팔레트) (Feat. G-DRAGON)" rel="spf-prefetch" aria-describedby="description- id-746662" dir="ltr">[MV] IU(아이유) _ Palette(팔레트) (Feat. G- DRAGON)</a> <a href="(.+?)".*title="(.+?)".*>pattern text
  • 21. Beautiful Soup https://www.crummy.com/software/BeautifulSoup/ • 파싱을 도와주는 강력한 python 라이브러리 • 정규식을 작성할 필요 없이 tag, id, class 등의 이름으로 쉽게 파 싱 가능 • 쉽고 간결하며, documentation이 매우 잘 되어 있음
  • 22. <a href="/watch?v=d9IxdwEFk1c" class="yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 polymer-title-link yt-uix-sessionlink spf-link " data- sessionlink="itct=CF0Q3DAYACITCLunmMmludMCFQbTWAod- eQDIyj0JFIJ7JWE7J207Jyg" title="[MV] IU(아이유) _ Palette(팔레트) (Feat. G-DRAGON)" rel="spf-prefetch" aria-describedby="description- id-746662" dir="ltr">[MV] IU(아이유) _ Palette(팔레트) (Feat. G- DRAGON)</a> text
  • 23. Beautiful Soup 설치 • Pip 로 설치 가능 pip install beautifulsoup4
  • 24. How to make 크롤러 1. 브라우저를 조종하여 데이터를 얻는 방법 • Selenium • 브라우저를 직접 띄우기 때문에 css나 image와 같이 구지 필요 없는 데이터도 다운로드 받게 됨 -> 속도가 느리다. • 동적 페이지도 크롤링이 가능하다. (javascript 실행 가능) 2. HTTP request를 날려서 데이터를 얻는 방법 • requests, scrapy • 속도가 빠르다. • Javascript 실행이 불가능함 -> Web page에 대한 사전 분석이 필요하 다.
  • 25. Selenium • 웹 브라우저 자동화 tool • Java, C#, Perl , PHP, Python , Ruby 등 다양한 언어 지원 • 직접 브라우저를 실행하여 python code로 mouse click, keyboard input 등의 event를 발생시킴 • 실제 브라우저로 실행한 것과 동일한 값을 얻을 수 있음 • 엄청 느림
  • 26. Scrapy • 링크를 타고 다른 페이지로 이동하며 scraping 하는 web spider 제작에 용이 • Django 처럼 프로젝트를 생성하면 기본 템플릿을 생성해줌 • 이 역시 documentation이 굉장히 잘 되어 있다. https://docs.scrapy.org/en/latest/ scrapy startproject 프로젝트명