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
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

BrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering Budget
BrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering BudgetBrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering Budget
BrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering Budget
Botify
 
[2018 데이터야놀자] 웹크롤링 좀 더 잘하기
[2018 데이터야놀자] 웹크롤링 좀 더 잘하기[2018 데이터야놀자] 웹크롤링 좀 더 잘하기
[2018 데이터야놀자] 웹크롤링 좀 더 잘하기
wangwon Lee
 
Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定
Go Maeda
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차
Taekyung Han
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
Heungsub Lee
 
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
Yongho Ha
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
Jeongsang Baek
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
Jaikwang Lee
 
Introduction to Web Scraping using Python and Beautiful Soup
Introduction to Web Scraping using Python and Beautiful SoupIntroduction to Web Scraping using Python and Beautiful Soup
Introduction to Web Scraping using Python and Beautiful Soup
Tushar Mittal
 
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
Seongyun Byeon
 
개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 intro개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 intro
Seongyun Byeon
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
Junyi Song
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッド
karky7
 
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
Jae Young Park
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
NAVER D2
 
데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.
Yongho Ha
 
SEO Content Automation
SEO Content AutomationSEO Content Automation
SEO Content Automation
Dylan Fuler
 
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) 오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
Yongho Ha
 
SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...
SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...
SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...
get traction GmbH
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
beom kyun choi
 

What's hot (20)

BrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering Budget
BrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering BudgetBrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering Budget
BrightonSEO 2019 - Crawl Budget is dead, please welcome Rendering Budget
 
[2018 데이터야놀자] 웹크롤링 좀 더 잘하기
[2018 데이터야놀자] 웹크롤링 좀 더 잘하기[2018 데이터야놀자] 웹크롤링 좀 더 잘하기
[2018 데이터야놀자] 웹크롤링 좀 더 잘하기
 
Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?어떻게 하면 데이터 사이언티스트가 될 수 있나요?
어떻게 하면 데이터 사이언티스트가 될 수 있나요?
 
로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법로그 기깔나게 잘 디자인하는 법
로그 기깔나게 잘 디자인하는 법
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
 
Introduction to Web Scraping using Python and Beautiful Soup
Introduction to Web Scraping using Python and Beautiful SoupIntroduction to Web Scraping using Python and Beautiful Soup
Introduction to Web Scraping using Python and Beautiful Soup
 
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게성장을 좋아하는 사람이, 성장하고 싶은 사람에게
성장을 좋아하는 사람이, 성장하고 싶은 사람에게
 
개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 intro개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 intro
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッド
 
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
[DevGround] 린하게 구축하는 스타트업 데이터파이프라인
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.데이터는 차트가 아니라 돈이 되어야 한다.
데이터는 차트가 아니라 돈이 되어야 한다.
 
SEO Content Automation
SEO Content AutomationSEO Content Automation
SEO Content Automation
 
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA) 오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
오늘 밤부터 쓰는 google analytics (구글 애널리틱스, GA)
 
SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...
SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...
SMX 2017: Search Marketing Reports: Warum deine Daten dich belügen oder - Spa...
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 

Viewers also liked

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
 
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
에디티지(Editage Korea)
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
Changwon Choe
 

Viewers also liked (10)

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)
 
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
[Ppt발표팁]효과적인 슬라이드 발표를 위한 10가지 팁
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 

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

REST API 설계
REST API 설계REST API 설계
REST API 설계
Terry Cho
 
Restful API guide
Restful API guideRestful API guide
Restful API guide
Benjamin Kim
 
2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기2020년 10월 24일 개발자 이야기
2020년 10월 24일 개발자 이야기
Jay Park
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
SeungHyun Lee
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
Inho Kwon
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
jeongseokoh
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
Seung 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.웹을지탱하는기술_01
SangHun Lee
 
웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS웹 개발 스터디 01 - HTML, CSS
웹 개발 스터디 01 - HTML, CSS
Yu 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]웹 개발자의 스펙 : HTTP
NAVER D2
 
Websocket
WebsocketWebsocket
Websocket
dana238767
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
OpenStack Korea Community
 
제 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 introduction
Jinkyoung Kim
 
WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징trustinlee
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
DK Lee
 

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

REST API 설계
REST API 설계REST API 설계
REST API 설계
 
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 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 프로젝트명