인터넷과 사용자간의 약속 HTTP
인터넷과 웹
- 두 컴퓨터를 연결하는 네트워크(network)의 탄생
- 이 네트워크를 묶어 근거리 지역 네트워크(Local Area Network, LAN) 탄생
- 범지구적으로 연결된 네트워크 Inter Network - 인터넷(Internet) 탄생!
- 이 인터넷에서 정보를 교환할 수 있는 환경 - WWW(World wide web) 줄여서 web 탄생
📌 인터넷은 여러 컴퓨터 끼리 네트워크를 연결한 것
📌 Web은 인터넷 상에서 정보를 교환하기 위한 시스템
웹에서 정보 주고받기
- 정보를 요청하는 컴퓨터를 클라이언트, 정보를 제공하는 컴퓨터를 서버라고 한다.
- 클라이언트가 서버에게 정보를 요청한다.
- 요청에 대해서 서버가 작업을 수행
- 수행한 작업의 결과를 클라이언트에게 응답
HTTP의 구조
- Hypertext Transfer Protocol
- 웹 상에서 정보를 주고받기 위한 약속
- 클라이언트에서 서버로 정보를 요청하는 것을 HTTP 요청(Request)라고 한다.
- 요청된 정보에 대해 서버가 클라이언트에게 응답하는 것을 HTTP 응답(Response)라고 한다.
- HTTP 요청/응답에 대한 정보를 담는 Head와 Body로 나뉜다.
- Head: 보내는 사람, 받는 사람
- Body: 내용물
- HTTP로 정보 요청하기 - HTTPRequest에서
- Head- Method, Path등을 확인 할 수 있다.(Header)
- HTTP로 정보 응답하기 - HTTPResponse
- 정보의 손실 없이 응답하기 위해서는 어떤 정보가 필요할까?
웹 페이지와 HTML
웹 사이트와 웹 페이지
- 웹 속에 있는 문서 하나를 웹 페이지
- 웹 페이지의 모음은 웹 사이트
웹 페이지는 어떻게 만들까?
- 웹 브라우저는 HTML요청을 보내고, HTTP응답에 담긴 HTML문서를(body) 우리가 보기 쉬운 형태로 화면을 그려주는 역할을 담당.
- 웹 페이지는 HTML이라는 형식으로 되어있고, 웹 브라우저는 우리가 HTTP 요청을 보내고, 응답받은 HTML 코드를 렌더링 해주었다.
HTML의 구조
- <!DOCTYPE html>로 명시해줌. 아래 코드는 html5 기본 뼈대 코드이다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>
- <...> 여는 태그와 </...> 닫는 태그로 구성되있다. 이 두개를 묶어 엘리먼트(element)라고 한다.
- Head는 문서에 대한 정보(제목, 언어 등)을 작성한다.
- Body는 문서의 내용(글, 이미지, 동영상 등)을 작성한다.
- 이렇게 HTML은 여러 태그(Tag)로 감싼 요소(Element)의 집합으로 이루어져있다.
- 태그로 내용을 묶어 글의 형식을 지정
- 태그는 그에 맞는 속성(attribute)를 가지기도 한다.
- 웹 스크래핑 관점에서 HTML을 정리하면
- 우리가 원하는 내용이 HTML 문서의
- 어디에 있지? 어떤 태그로 묶여있지?
- 를 관찰해야 한다.
Python을 이용해서 HTTP 통신하기
실습 - colab
- request 라이브러리
- request는 Python을 이용해서 간단히 HTTP 통신을 진행할 수 있도록해주는 라이브러리이다.
- pip install requests
정보를 달라고 요청하는 GET
# request 라이브러리를 불러온 후, NAVER의 홈페이지를 요청한 후 응답 받아보기
import requests
res = requests.get("https://www.naver.com")
res
# Header를 확인: .headers
res.headers
# Body를 텍스트 형태로 확인해보기: .text
res.text[:1000]
정보 갱신하는 것을 요청하는 POST
- webhook.site를 이용해서 post 테스트 해보기
# payload와 함께 POST를 보내보기: requests.post()
payload = {"name": "Hello", "age":13}
res = requests.post("https://webhook.site/8aa56140-9bfd-4fab-93c9-121bda00cb87", payload)
# 상태 코드(status_code)를 확이해보기: .status_code
res.status_code
- webhook.site를 확인해보면 응답이 성공적으로 온것을 확인할 수 있다.
윤리적으로 웹 스크래핑/크롤링 진행하기
웹 크롤링 과 웹 스크래핑
- 웹 스크래핑 - 핵심은 '추출', 웹 페이지들로부터 우리가 원하는 정보를 추출
- 특정한 목적으로 특정 웹 페이지에서 데이터를 추출하는 것- 데이터 추출(ex, 날씨 데이터 가져오기, 주식 데이터 가져오기 등등등)
- 웹 크롤링 - 핵심은 '색인', 클롤러(Crawler)를 이용해서 웹 페이지 정보를 인덱싱
- URL을 타고다니며 반복적으로 데이터를 가져오는 과정 - 데이터 색인( 검색 엔진의 웹 크롤러)
- URL을 타고다니며 반복적으로 데이터를 가져오는 과정 - 데이터 색인( 검색 엔진의 웹 크롤러)
올바르게 HTTP 요청하기
- 웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가?
- 나의 웹 스크래핑/크롤링이 서버에 영향을 미치지는 않는가?
- 로봇 배제 프로토콜(REP)
- 웹 브라우징은 사람이 아닌, 로봇이 진행할 수 있다.
- 무턱대고 모든 정보를 취득하는 것이 정당할까 -> REP(Robot Exclusion Protocol)
- robots.txt 실습
# requests 모듈을 불러온 후, 다음 웹사이트에 대한 robots.txt 정책을 확인해보자.
# https://www.naver.com
import requests
res = requests.get("https://www.naver.com/robots.txt")
'프로그래머스 AI 데브코스 5기 > CS' 카테고리의 다른 글
연결 리스트(Linked Lists) (0) | 2023.03.20 |
---|---|
알고리즘의 복잡도 (0) | 2023.03.20 |
재귀 알고리즘(Recursive Algorithm) (0) | 2023.03.19 |
API to serve ML Model (0) | 2023.03.17 |
AWS Enviroment 환경 세팅 (0) | 2023.03.17 |