SlideShare a Scribd company logo
웹 크롤링 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
웹 크롤링 (Web scraping) 의 이해
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 프로젝트명

More Related Content

What's hot (20)

PPTX
프로젝트 기획서 발표 - 웹크롤링 (한양대 오픈소스동아리)
Osori Hanyang
 
PDF
스프링 시큐리티 구조 이해
beom kyun choi
 
PPTX
The beginner’s guide to 웹 크롤링 (스크래핑)
Eunjeong (Lucy) Park
 
PDF
Web Crawling
Wonjun Hwang
 
PDF
Python 테스트 시작하기
Hosung Lee
 
PPTX
Soap vs rest
Antonio Severien
 
PPTX
1. 아키텍쳐 설계 프로세스
Terry Cho
 
PPTX
仮想DOMを理解する
K K
 
PPTX
Selenium을 이용한 동적 사이트 크롤러 만들기
Gyuhyeon Jeon
 
PDF
쿠키런 1년, 서버개발 분투기
Brian Hong
 
PDF
[2D4]Python에서의 동시성_병렬성
NAVER D2
 
PPTX
Memento pattern
Sayanton Vhaduri
 
PDF
Introdução APIs RESTful
Douglas V. Pasqua
 
PDF
Spring Framework - Spring Security
Dzmitry Naskou
 
PDF
CSS Grid vs. Flexbox
Ecaterina Moraru (Valica)
 
PPTX
4. 대용량 아키텍쳐 설계 패턴
Terry Cho
 
PDF
엘라스틱서치 실무 가이드_202204.pdf
한 경만
 
PPTX
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Yooseok Choi
 
PDF
REST API and CRUD
Prem Sanil
 
프로젝트 기획서 발표 - 웹크롤링 (한양대 오픈소스동아리)
Osori Hanyang
 
스프링 시큐리티 구조 이해
beom kyun choi
 
The beginner’s guide to 웹 크롤링 (스크래핑)
Eunjeong (Lucy) Park
 
Web Crawling
Wonjun Hwang
 
Python 테스트 시작하기
Hosung Lee
 
Soap vs rest
Antonio Severien
 
1. 아키텍쳐 설계 프로세스
Terry Cho
 
仮想DOMを理解する
K K
 
Selenium을 이용한 동적 사이트 크롤러 만들기
Gyuhyeon Jeon
 
쿠키런 1년, 서버개발 분투기
Brian Hong
 
[2D4]Python에서의 동시성_병렬성
NAVER D2
 
Memento pattern
Sayanton Vhaduri
 
Introdução APIs RESTful
Douglas V. Pasqua
 
Spring Framework - Spring Security
Dzmitry Naskou
 
CSS Grid vs. Flexbox
Ecaterina Moraru (Valica)
 
4. 대용량 아키텍쳐 설계 패턴
Terry Cho
 
엘라스틱서치 실무 가이드_202204.pdf
한 경만
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Yooseok Choi
 
REST API and CRUD
Prem Sanil
 

Viewers also liked (10)

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

Similar to 웹 크롤링 (Web scraping) 의 이해 (20)

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

웹 크롤링 (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
  • 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 프로젝트명