[프로그래머스 인공지능 미니 데브코스] 수업 정리 -5- [웹 스크래핑 기초 I]

3yeong·2022년 7월 26일
0

1. 인터넷 사용자간의 약속, HTTP

인터넷과 웹

  1. 태초에 컴퓨터가 있었다!
  2. 두 컴퓨터를 연결하는 네트워크(Network)의 탄생
  3. 네트워크를 묶어 근거리 지역 네트워크(LocalArea Network, LAN)탄생
  4. 범지구적으로 연결된 네트워크 Inter Network - 인터넷(Internet) 탄생

Q. 웹은 무엇인가?

: 인터넷에서 정보를 교환할 수 잇는 환경을 만들어볼까?
-> WWW(Wold Wide Web, 줄여서 Web) 탄생

인터넷은 여러 컴퓨터 끼리 네트워크를 연결한 것
web은 인터넷 상에서 정보를 교환하기 위한 시스템!

웹에서 정보 주고받기

신발가게에서 신발을 주문하는 방법

  1. 손님이 직원에게 정보를 요청
  2. 요청에 대해서 직원이 처리
  3. 상황에 따라서 직원이 손님에게 응답

컴퓨터도 똑같은 방법으로 주고 받는다!

정보를 요청하는 컴퓨터 클라이언트
정보를 제공하는 컴퓨터 서버

  1. 클라이언트가 서버에게 정보를 요청
  2. 요청에 대해서 서버가 작업을 수행
  3. 수행한 작업의 결과를 클라이언트에게 응답

HTTP의 구조

HTTP?

: Hypertext Transfer Protocol!
: 웹 상에서 정보를 주고 받기 위한 약속

  • 클라이언트에서 서버로 정보를 요청 -> HTTP 요청(Request)
  • 요청된 정보에 대해 서버가 클라이언트에게 응답 -> HTTP 응답(Response)

(예시)

  • 쇼핑으로 구매한 상품을 배송받으려 한다. 어떤 정보를 작성해야하는가?
    -> 받는 사람 이름, 받는 사람 주소, 배송 방법의 정보를 작성
  • 택배를 크게 2가지로 나누면? 송장내용물

-> HTTP도 마찬가지

  • Host, Resource, Method
  • HTTP도 요청/응답에 대한 정보를 담는 Head(보내는 사람, 받는 사람)와 내용물인 Body(내용물)로 나뉜다.

HTTP Request


Header
GET : /가 있는 위치의 값을 요청
Host : 해당 페이지에 있는 값을 요청
Uset-Agent : 요청하는 사람

HTTP Response


Header
OK : 잘 도착함을 알림
Body
원하는 정보가 담긴 문서가 나타남

2. 웹 페이지와 HTML

웹 사이트와 웹 페이지

웹 속에 있는 문서 하나는 웹 페이지
이러한 웹 페이지 모음 웹 사이트

웹 페이지는 어떻게 만들까?

: 웹 페이지는 엄청 복잡한 줄글로 되어있다.

이 코드들은 response의 body 부분이다.
웹 브라우저는 HTML요청을 보내고, HTTP 응답이 담긴 HTML 문서를 우리가 보기 쉬은 형태로 화면을 그려주는 역할을 담당이다.

웹 페이지는 HTML이라는 형식으로 되어있고,
웹 브라우저는 우리가 HTTP 요청을 보내고, 응답받는 HTML 코드를 렌더링 해주는 것이다.

HTML의 구조

: HTML(HyperText Markup Language)

  1. <!DOCTYPE html>를 통해 HTML5임을 명시
  2. 가장 바깥에 <html>(여는 태그) </html>(닫는 태그) 태그로 감싸져 있다.
  3. 크게 Head와 Body로 나뉜다.
  4. Head는 문서에 대한 정보 (제목, 언어 등)을 작성한다.
  5. Body는 문서의 내용 (글, 이미지, 동영상 등)을 작성한다.

    HTML은 여러 태그(tag)로 감싼 요소(Element)의 집합으로 이루어져 있다!

  • HTML은 태그로 내용을 묶어 글의 형식을 지정
  • 태그는 그에 맞는 속성(attribute)를 가지기도 한다.

참고 : 웹 브라우저 마다 지원하는 태그와 속성이 다르다!

우리가 원하는 내용이 HTML 문서의 어디에 있는지, 어떤 태그로 묶여있는지를 관찰해야한다.

3. 나의 첫 HTTP 통신 코드

  • Python의 requests 라이브러리를 이용해 HTTP 통신 진행하기

request 라이브러리

  • requests는 Python을 이용해 간단히 HTTP 통신을 진행할 수 있는 라이브러리이다.
    이를 사용하기 위해서 는 먼저 requests라이브러리를 설치해야한다.
    pip install을 통해 이를 실행할 수 있다.
    Tip: %를 이용해 노트북(.ipynb)환경에서 실행할 수 있다.
%pip install requests

정보를 달라고 요청하기, GET

requests 라이브러리를 불러온 후, NAVER 홈페이지를 요청한 후 응답을 받아본다.

import requests

#get method 불러옴, 네이버의 주소를 인자로 넣기
res = requests.get("https://www.naver.com")

res # HTTP 응답이 담겨있음
-> <Response [200]> #요청에 따른 응답, 객체로 온다. (200 = OK)

Header를 확인해보자 : .headers

res.headers # 객체 안에 있는 속성이 hesder를 담고 있음

Body를 텍스트 형태로 확인해보자 : .text

res.text[:1000] # .text는 단순하게 모든 정보를 가져옴

정보 갱신하는 것을 요청하기, POST

우리는 우리의 정보를 제공해주면서 서버로하여금 무엇가 요청을 진행할 때도 있다.
우리가 매일 진행하는, 로그인이 그 예시이다.

이러한 요청을 처리하는 HTTP Method가 있는데, 이것이 POST이다.

POST를 활용하기 위해 https://webhook.site 를 이용해본다.

  • 해당 url은 개인을 위한 url이며 요청을 보면 옆에 나타나게 된다.

payload와 함께 POST를 보내보자 : requests.post()

payload = {"name" : "Hello", "age" : 13}

# 요청을 하는 과정에서 body에 payload를 넣는다. 
res = requests.post("https://webhook.site/59d38982-e81d-44e6-a0fe-c78cc69f63cd", payload)

상태코드를 확인 : .status_code

res.status_code

4. 윤리적으로 웹 스크래핑, 크롤링 진행하기

웹 스크래핑과 웹 크롤링

웹 스크래핑?

: 핵심은 추출
: 웹 페이지들로부터 우리가 원하는 정보를 추출

웹 크롤링?

: 핵심은 색인
: 크롤러(Crawler)를 이용해서 웹페이지의 정보를 인덱싱

웹 스크래핑 : 특정한 목적으로 특정 웹 페이지에서 데이터를 추출하는 것 - 데이터 추출
e.g. 날씨 데이터가져오기, 주식 데이터 가져오기, ...

웹 크롤링 : URL을 타고다니며 반복적으로 데이터를 가져오는 과정 - 데이터 색인
e.g. 검색 엔진의 웹 크롤러

올바르게 HTTP 요청하기

올바르게 HTTP 요청하기 위해 고려해야 할 것들

  • 웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가?
  • 나의 웹 스크래핑/크롤링이 서버에 영향을 미치지 않는가?

로봇 배체 프로토콜(REP)

웹 브라우징은 사람이 아닌, 로봇이 할 수 있다.
그렇다면 무턱대고 모든 사이트에 대해 모든 정보를 취득하는 것이 정당할까?

1994년, REP(Robot Exclusion Protocol)이 나왔다.

robots.txt

웹 크롤러들은 이 규칙을 지키면서 크롤링을 진행

  • 모든 user-agent에 대해서 접근을 거부
  • 모든 user-agent에 대해 서 접근을 허가
  • 특정 user-agent에 대해서 접근 불허

robots.txt 살펴보기

robots.txt?

robots.txt는 웹 사이트 및 웹 페이지를 수집하는 로봇들의 무단 접근을 방지하기 위해 만들어진 로봇 배제 표준(robots exclusion standard)이자 국제권고안이다.

일부 스팸 봇이나 악성 목적을 지닌 가짜 클라이언트 로봇은 웹 사이트에 진짜 클라이언트처럼 접근한다. 그리고 무단으로 웹 사이트 정보를 긁어가거나, 웹 서버에 부하를 준다.
이러한 로봇들의 무분별한 접근을 통제하기 위해 마련된 것이 robots.txt이다.
스팸 봇이 아님을 브라우저에게 알려주는 것이 사용자 에이전트(user agent) 정보이다.

나의 User Agent 확인하기 : https://www.whatismybrowser.com/detect/what-is-my-user-agent/

사용자 에이전트는 요청을 보내는 것의 주체를 나타내는 프로그램이다. 웹 맥락에서는 브라우저, 웹 페이지를 수집하는 봇, 다운로드 관리자, 웹에 접근하는 다른 앱 모두 사용자 에이전트이다.
웹 서버에 요청할 때 사용자 에이전트 HTTP 헤더(user agent HTTP header)에 나의 브라우저 정보를 전달하면 웹 서버가 진짜 사용자로 인식할 수 있게 된다.

웹 스크래핑을 할 때 원칙
1. 요청하고자 하는 서버에 과도한 부하를 주지 않는다.
2. 가져온 정보를 사용할 때 저작권과 데이터베이스권에 위배되지 않는지 주의한다.

robots.txt 가져오기

robots.txt는 웹 페이지 메인 주소에 /robots.txt를 입력하면 확인할 수 있다.

  • ex) naver는 www.naver.com/robots.txt 를 입력하면 된다.

requests 모듈을 불러온 후, 웹사이트에 대한 robots.txt 정책을 확인해보자.

import requests
res = requests.get("https://www.naver.com/robots.txt")
print(res.text)

->
User-agent: *
Disallow: /
Allow : /$ 
  • User-aget : 규칙이 적용되는 대상 사용자 에이전트
  • Disallow : 크롤링을 금지할 웹 페이지
  • Allow : 크롤링을 허용할 웹 페이지
profile
초보 컴공

1개의 댓글

comment-user-thumbnail
2022년 7월 26일

👍

답글 달기