크롤링(Crawling)
1. 특정 페이지에 있는 정보들을 내가 원하는 포맷으로 가져오는것
2. WebScrapping을 자동으로 돌아다니며 분석 및 저장등을 하는 행위 정도로 저장할수 있습니다.
쉽게 생각하는 크롤링(Crawling)
- 사람들이 웹페이지에 직접 접속해서 정보를 읽어드리는 것과 유사
- 인터넷상에 흩어져 있는 자료들을 사람 대신에 프로그램을 통하여 서핑하며 수집과 가공을 하는것
- 이때 프로그램 구성에 따라 서핑능력의 차이가 발생하게 되는데 대표적으로 자바스크립트의 처리를 하는지 못하는지의 여부가 있습니다.
크롤링을 하기전 알아야하는 지식
HTTP 매서드
- GET: 리소스 요청 (크롤링에 주로 사용) => 받아드리는 녀석
- POST: 대기 리소스 추가 요청이나 수정/삭제 목적으로 사용(크롤링에 주로 사용) => 내가 추가로 요청하는 녀석
- PUT: 리소스 수정 요청
- DELETE: 리소스 삭제 요청
- HEAD: HTTP헤더 정보만 요청. 해당 자원의 존재여부를 확인하기 위한 목적
- OPTIONS: 웹서버가 지원하는 매서드 종류 반환 요청
- TRACE: 클라이언트의 요청을 그대로 반환 (여기서 클라이언트느 사용자를 말하겠죠?)
GET/POST ?
@GET
- 엽서(실생활에서 편지만 보낼수 있는 엽서에 비유)
- 주소와 함께 메시지를 남김
- 물건을 보낼 수 없다(파일 업로드 불가)
- 잘 설계된 서비스라면 주로 조회 요청시 사용
@POST
- 택배(실생활에서 편지를 포함한 여러 물건도 보낼수 있는 택배에 비유)
- 주소와 함께 메시지나 물건도 보낼 수 있음
- 파일업로드를 지원
- 잘 설계된 서비스에서 주로 추가/수정/삭제 요청시에 사용
HTTP 요청/응답 패킷 형식
@ 요청패킷
- 요청헤더: 클라이언트에서 필요한 헤더 Key/Value를 세팅한 후 요청, 전달
- 첫번째 빈줄: Header와 Body 구분자
- Body: 클라이언트에서 필요한 Body를 세팅한 후 요청, 전달
@ 응답패킷
- 응답헤더: 서버에 필요한 Key/Value를 세팅한 후, 응답, 전달
- 첫번째 빈줄: Header와 Body 구분자
- Body: 서버에서 필요한 Body를 세팅한 후 요청, 전달
@ 요청패킷 vs 응답패킷
- 요청헤더는 클라이언트에서 필요한 헤더 Key/Value를 세팅한후 요청 전달 하지만,
응답헤더는 서버 에 필요한 Key/Value를 세팅한후 응답 전달 한다.
- 쉽게 생각하면 클라이언트는 사용자 이기 때문에 당연히 서버에게 요청을 할것이고 서버는 서비스를 하는 업체 입장이기 떄문에 응답을 해주는 것이다.
클라이언트 - 요청 (음식점의 주문) vs 서버는 응답(주문을 받아 알맞은 음식을 서빙)
@ 헤더(Header)란?
- HTTP요청/응답 시에 헤더 정보가 Key/Value 형식으로 세팅이 된다.
- 대개 브라우저에서는 다음 헤더를 설정하는데,
- User-Agent: 브라우저의 종류
- Referer: 이전 페이지 URL(어떤 페이지를 거쳐서 왔는가?)
- Accept-Language: 어떤 언어로 응답을 원하는가?
- Authorization: 인증 정보
- 크롤링을 할떄는 User-Agent헤더와 Referer를 커스텀하게 설정할 필요가 있다.
- 서비스에 따라 UserAgent헤더와 Referer헤더를 통해 응답을 거부하기도 함
ex) 네이버 웹툰.
@Body란?
- HTTP 요청시에는 Body가 없고, 응답에만 있음(서버에서 응답을 줄때만 있는게 맞겠죠?)
Ex)HTML코드, 이미지데이터, JavaScript코드, CSS코드, 비디오 데이터 등등..
Requests 툴을 사용한 기본 크롤링
본 실습은 Python 3.6.0 환경에서 실습합니다.
1. requsts 설치
pip install requests 입력으로 설치를 해줍니다.
설치가 완료되었습니다.
2. 본격적인 실습
코드입력
1 2 3 4 5 6 7 8 9 10 11 | import requests #설치한 requests를 불러옵니다 response = requests.get('https://news.naver.com') #response 변수에 requests를 사용하여 get('불러올 홈페이지주소')을 넣어줍니다. html = response.text #불러온 response를 text로 변환하여 html 변수에 넣습니다 print(html) #html을 출력합니다. | cs |
https://news.naver.com 이 print로 출력된 결과화면입니다.
requests의 원리
- 첫 응답만 받으며 추가 요청이 없음
- 단순한 요청에 최적화
- HTML응답을 받더라도, 이에 명시된 이미지/CSS/JavaScript 추가 다운을 수행하지 않지만 직접 다운로드 요청은 가능하다
그밖의 selenium이란?
- 웹브라우저 자동화 툴
- javascript/css 지원, 기존 GUI 브라우저 자동화 라이브러리
- 사람이 웹서핑 하는 것과 동일한 환경이지만 그만큼 리소스를 많이 먹음
- 웹브라우저에서 HTML에 명시된 CSS/JavaScript를 모두 자동다운로드하여 적용
- selenium이 직접 하지 않고 크롬등의 툴을 가지고 사용하기 때문에 리소스를 많이 잡아먹음
본 게시글은 nomade.kr 의 유료 동영상 강의를 참고하여 이해한뒤 본인이 개인 정리하여 게시한 글입니다.
'파이썬 프로그래밍 > 파이썬 크롤링' 카테고리의 다른 글
[Python] 크롤링 연습문제. reddit 크롤링 풀이 (0) | 2017.07.18 |
---|---|
[Python] BeautifulSoup4 라이브러리와 기초 (멜론차트 크롤링) (3) | 2017.07.17 |
[Python] requests 기초와 beautiful soup를 활용한 크롤링, [크롤링 준비] (1) | 2017.07.15 |
[Python] 파이썬의 Beautiful Soup를 이용한 파싱 (9) | 2016.05.19 |
[Python] 파이썬을 이용한 크롤링 (2) | 2016.05.19 |