[DEV] 3주차. 파이썬으로 웹 다루기(2)
1. 인터넷
- WWW : 인터넷에서 정보를 교환할 수 있는 환경 (World Wide Web)
- 여러 컴퓨터끼리 네트워크를 연결한 것
- Web은 인터넷 상에서 정보를 교환하기 위한 시스템
2. Web에서 정보 주고받기
- 클라이언트 : 정보 요청
- 서버 : 정보 제공
1) 클라이언트가 서버에게 정보를 요청
2) 요청에 대해서 서버가 작업 수행
3) 수행한 작업의 결과를 클라이언트에게 응답
3. HTTP
- Hypertext Transfer Protocol
-
웹 상에서 정보를 주고받기 위한 약속
- HTTP 요청 (Request)
- 클라이언트에서 서버로 정보를 요청하는 것
- HTTP 응답 (Response)
- 요청된 정보에 대해 서버가 클라이언트에게 응답하는 것
HTTP 구조
- HEAD
- 요청/응답에 대한 정보
- BODY
- 내용물 (정보)
HTTPRequest - Header
GET / HTTP 1.1
Host: www.programmers.com
User-Agent: Mozilla/5.0
...
GET
키워드/
: root. 가장 최상단의 정보
HOST
- 누구의 정보를 요청하는지
- www.programers.com 의
/
정보
User-Agent
- 사용자 정보 (요청하는 자)
HTTPResponse
HTTP / 1.1 200 OK
///
<html>...</html>
OK
- 잘 왔다는 시그널
<html>...</html>
- 요청했던 정보
200
- status code
- ex)
- 404 : Not Found
- 503 : Server Error
- 위 경우 정보가 오지 않을 수 있음
4. 웹페이지
- 웹페이지
- HTML 형식
- 웹브라우저
- 우리가 HTML 요청을 보내고, HTTP 응답에 담긴 HTML 문서를 우리가 보기 쉬운 형태로 화면을 그려주는 역할
- HTML 코드 렌더링
5. HTML 구조
<!DOCTYPE html>
<html>
<head>
<title>Example Document</title>
</head>
<body>
<h1>Hello World!</h1>
<p>My name is BK!</p>
</body>
</html>
<!DOCTYPE html>
- HTML5 임을 명시
-
가장 바깥에
<html>
태그로 감싸져 있음 - 크게 Head와 Body로 나눌 수 있음
- Head
- 문서에 대한 정보 (제목, 언어 등) 작성
- Body
- 문서의 내용 (글, 이미지, 동영상 등) 작성
- HTML은 여러 태그(Tag)로 감싼 요소(Element)의 집합으로 이루어져 있음!
- 태그로 내용을 묶어 글의 형식 지정
- 태그는 그에 맞는 속성(attribute)를 가지기도 함
6. HTTP 통신 코드
GET : 정보 요청
# requests 라이브러리 불러온 후, NAVER의 홈페이지 요청하여 응답 받기
import requests
res = requests.get("https://www.naver.com")
res
<Response [200]> : OK
# Header 확인 : .headers
res.headers
# Body 텍스트 형태로 확인 : .text
res.text[:1000]
POST : 정보 갱신 요청
- 사용자의 정보를 제공하면서 서버에게 무언가 요청을 진행하는 경우
- ex) 로그인
- ID, PWD 제공 -> 서버에게 전달
- 서버 : 클라이언트에서 보내온 정보가 서버에 있는 이 사용자의 ID, PWD와 일치하는지 확인
# payload와 함께 POST 보내기 : requests.post()
payload = {"name": "Hello", "age": 13}
res = requests.post("https://webhook.site/5dd86a17-4493-4c3c-ac7f-0b968cb03296", payload)
- request의 body에 정보 전달
- 간단하게 dictionary 이용
# status code 확인 : .status_code
res.status_code
200
7. 웹 크롤링과 웹 스크래핑
- 웹 스크래핑
- 웹페이지들로부터 우리가 원하는 정보를 추출
- ex) 프로그래머스 플랫폼 속엔 어떤 프로그래밍 문제들이 있지?
- 특정한 목적으로 특정 웹페이지에서 데이터를 추출하는 것
- ex) 날씨 데이터 가져오기, 주식 데이터 가져오기, …
- 웹 크롤링
- 크롤러(Crawler)를 이용해서 웹 페이지의 정보를 인덱싱
- ex) 프로그래머스 플랫폼 속엔 어떤 페이지들이 있지?
- URL을 타고다니며 반복적으로 데이터를 가져오는 과정
- ex) 검색 엔진의 웹 크롤러
8. 올바르게 HTTP 요청하기
- 웹 스크래핑/크롤링을 통해 어떤 목적을 달성하고자 하는가?
- 나의 웹 스크래핑/크롤링이 서버에 영향을 미치지는 않는가?
robots.txt
- 웹사이 및 웹페이지를 수집하는 로봇들의 무단 접근을 방지하기 위해 만들어진 로봇 배제 표준
User-agent
,Disallow
,Allow
이용- User-agent : 규칙이 적용되는 대상 사용자 에이전트
- Disallow : 크롤링을 금지할 웹페이지
- Allow : 크롤링을 허용할 웹페이지
- robots.txt 가져오기
import requests
res = requests.get("https://www.naver.com/robots.txt")
print(res.text)
User-agent: *
Disallow: /
Allow: /$
/$
: 순수하게/
로 끝나는 페이지- 위의 경우
https://www.naver.com/
만 허용하겠다는 뜻
- 위의 경우