수학과의 좌충우돌 프로그래밍

[crawling] 01.크롤링을 알기 전, HTTP 본문

웹프로그래밍/crawling

[crawling] 01.크롤링을 알기 전, HTTP

ssung.k 2019. 3. 14. 01:46

먼저 크롤링이 무엇인지 부터 알아보자. 크롤링이란 사람이 웹페이지에 접속해서 정보를 찾는 과정을 프로그램을 통해 찾아 수집하고 원하는 형태에 맞게 가공하는 모든 과정을 의미한다.

크롤링에 대한 설명을 하기 전에 먼저 알아야 할 개념이 있는데 바로 HTTP이다. 아마 많이 익숙할 것이다. 우리가 웹 상에서 어느 페이지에 접속하기 위해 입력하는 주소가 대부분 http 로 시작하기 때문이다.

 

HTTP 에 대해서 알아보자

HTTP 란?

HTTP는 HyperText Transfer Protocol 의 약자로 인터넷 통신을 위해 사용되는 프로토콜이다. 또 어려운 단어가 등장했다. 그러면 프로토콜은 무엇일까? 쉽게 생각해서 컴퓨터 간의 의사소통에 사용되는 언어이다. 사람 간의 대화에서도 서로 이해할 수 있는 같은 언어를 써야하는 것 처럼 컴퓨터끼리도 의사소통을 위한 언어를 통일 시켜놓았고 이를 프로토콜이라고 한다. 즉 , HTTP 라는 것도 컴퓨터 간의 소통하는 언어라는 것이다.

server 와 client

HTTP 는 서버(server)클라이언트(client)의 대화이다. 여기서 서버는 django, Spring 등으로 구현한 백앤드, 클라이언트는 웹 브라우저라고 이해하면 된다. 대화를 하는 방식은 클라이언트가 서버에 요청(request)을 하고, 서버는 그 요청에 대한 반응(response)을 돌려주는 식이다. 여기서 요청이라고 하는 것은 어려워 보이지만 우리가 평소에도 아주 쉽게 하고 있다. 예를 들면 웹페이지에 접속하기, 새로고침, 링크 클릭 등이 있다. 이렇게 URL을 통해 요청을 보내면 server는 이에 맞는 응답을 하는데 응답 역시도 친숙하다. 웹 화면을 보여주는 html 파일, 이미지 등의 응답을 하게 된다.

HTTP의 특징

  • connectionless

    연결이 되어있지 않다는 뜻이다. 정확히 말하면 필요에 따라 연결을 하고 요청과 반응을 마친 후에 접속을 끊는다. 즉 계속 해서 연결이 되어있지 않다. 그렇기 때문에 서버와 클라이언트의 끊임없는 연결이 필요할 때는 Ajax와 같은 다른 방식을 사용한다.

  • stateless

    통신이 한 번 끊기면 현재 상태를 저장하지 않는다. 따라서 로그인과 같이 로그인한 정보를 계속 유지해야 하는 경우에는 쿠키 등과 같은 다른 방법을 사용하게 된다.

 

HTTP 메소드

GET - 리소스 요청

POST - 리소스 추가 요청이나 수정/삭제 요청

PUT - 리소스 수정 요청

DELETE - 리소스 삭제 요청

HEAD - HTTP 해더 정보만 요청, 해당 자원 존재여부 확인 목적

OPTIONS - 웹서버가 지원하는 메서드 종류 반환 요청

TARCE - 클라이언트의 요청을 그대로 반환

많은 메소드가 있지만 GETPOST가 제일 중요하다. GET 과 POST는 각각 엽서와 소포에 비유할 수 있다. GET은 엽서처럼 주소에 내용이 표시되고 큰 물건은 담지 못하는 것 처럼 파일을 담지 못한다. POST는 주소에 내용을 남기지 않고 대신 큰 물건, 파일 등을 업로드 할 수 있다.

 

header와 body

요청과 응답 패킷은 header와 body로 구분되어있다. body에는 파일의 내용 등이 담길 수 있는데 GET 요청과 같은 경우에는 이 body가 존재하지 않는다. (그래서 파일을 업로드 할 수 없다.) GET 응답과 POST의 요청,응답은 둘 다 header, body로 구분되어있다. header와 body는 빈 줄로서 구분을 해준다.

  • header

    • key/value 형식으로 세팅

    • header에 설정할 것이 많지만 그 중 아래 4개를 주의하자.

      1. User-Agent : 브라우저 종류
      2. Referer : 이전 페이지 URL
      3. Accept-Language : 어떤 언어의 응답을 원하는가?
      4. Authorization : 인증정보
    • header 확인하기

      • httpie 라는 패키지를 이용하여 header를 확인할 수 있다.

        pip install httpie
        
      • 네이버의 header의 내용을 보기위해서는

        http --header https://naver.com
        


         

왜 HTTP를 알아야 하는가

간략하게 나마 HTTP 에 대해서 알아보았다. 이것이 크롤링과 무슨 관계길래 느닷없이 HTTP 에 대한 설명을 한 것일까? 크롤링이 바로 HTTP 프로토콜로 통신을 하기 때문이다. 크롤링할 대상들은 웹에 존재하니 당연한 이야기다. 그렇기 때문에 python 만으로는 불가능하고 웹 브라우저가 이를 도와줘야한다. 물론 이 역시 라이브러리를 통해 웹의 도움을 받을 수 있다.

 

 

크롤링

이제 크롤링으로 다시 돌아와보자. 크롤링을 구현하기 위해서는 request,selenium,API 등이 있다. 첫번째와 두번째는 python의 라이브러리를 통해서, 3번은 instagram, 네이버 블로그 검색 등 이미 구현된 API를 가져다가 쓰는 방식이다. 

주의해야 할 점은 API를 통한 크롤링은 이미 허가되는 부분에 한해서만 크롤링을 허용해 문제될 것이 없지만 라이브러리를 통해 구현하는 크롤링은 조심해야합니다. 웹 상에 떠돌아다니는 정보도 저작권이 있기 때문이죠. 또한 크롤링 해오는 사이트가 사이트를 수정함에 따라 크롤링 프로그램을 수정해야하는 일이 생길 수 도 있다.

이번에는 위 방법 중 request를 통한 크롤링을 알아보도록 하자. 먼저 필요한 라이브러리를 먼저 install 하는데 install 할 시, BeautifulSoup가 아닌 BeautifulSoup4 로 해주는 걸 주의하자.

pip install requests
pip install BeautifulSoup4

import 를 통해 정상적으로 패키지가 설치되었음을 확인하고 넘어간다.

import requests
from bs4 import BeautifulSoup

 

request vs selenium

  • request 는 html에 찾고자하는 부분이 있을 경우에 사용

    • 웹에서 마우스 우클릭 -> 페이지 소스보기로 확인 시 html 코드가 있을 경우

      마우스 우클릭이 안될 경우에는 크롬의 Enable Right Click 확장을 사용

  • selenium 은 응답되는 html 에 없고 그 뒤로 수행되는 javascript 를 통해 처리될 경우,로그인이 필요한 경우에 사용
    • 개발자도구 -> Elements는 javascript로 변경된 부분까지 모두 나옴

 

 

Comments