웹 클라이언트 라이브러리, 웹 클라이언트 개발
먼저 클라이언트는 전문가에게 필요한 서비스를 요청하는 고객을 뜻한다.
웹 클라이언트는?
웹 클라이언트는 웹 서버에게 필요한 데이터(웹 페이지, 사진, 동영상)를 요청하는 프로그램이다.
즉, 웹 서버에 요청을 보내는 애플리케이션(프로그램)은 모두 웹 클라이언트라고 할 수 있다. 우리가 가장 많이 사용하는 웹 클라이언트에는 웹 브라우저(구글 크롬, 엣지, 익스플로러)가 있고, 웹 브라우저 이외에도 웹 클라이언트를 개발해서 사용하는 경우도 많다. 예로 기상청의 날씨 API를 활용해서 만든 날씨 정보 앱도 웹 클라이언트라고 볼 수 있다.
파이썬은 이런 웹 클라이언트를 만들 수 있도록 여러가지 표준 라이브러리를 제공하고 있다.
표준 라이브러리 중 urllib 패키지는 웹 클라이언트를 개발하는데 주로 사용한다.
- 표준 라이브러리: 파이썬에 기본으로 설치된 모듈(ex. math)과 패키지(urllib), 내장함수(print)를 묶어 놓은 것
- 패키지: 여러 모듈(urllib 패키지 안의 parse, request, response, error 등)을 묶어 놓은 것
- 모듈: 특정 기능을 .py 파일 단위로 작성한 것(각종 변수, 함수, 클래스를 담고 있는 파일)
* 표준 라이브러리(math, random, urllib, numpy, pandas...) 이외에 pip install을 통해 다양한 패키지 사용 가능
ex) 패키지 사용하기
# 패키지 가져오기
import 패키지.모듈
import 패키지.모듈A, 패키지.모듈B
from 패키지 import 모듈
ex) import urllib.request
box = urllib.request.urlopen('https://bentist.tistory.com/')
# 패키지.모듈에 이름 부여하기
import 패키지.모듈 as (패키지.모듈)에 이름 부여
ex) import urllib.request as r
box = r.urlopen('https://bentist.tistory.com/')
# 패키지 모듈의 기능 가져오기
import 패키지.모듈 import 변수, 함수, 클래스
ex) from urllib.reqeust import urlopen(함수), Request(클래스)
box = Request('https://bentist.tistory.com/')
response = urlopen(box)
response.status
>>> 200
# 패키지 모듈의 일부에 이름 지정하기
import 패키지.모듈 import 변수/함수/클래스 as 이름
ex) from urllib.request import Request as r, urlopen as u
# 표준 모듈 가져오기
import 모듈명
import 모듈명 as 이름
ex) import math
math.pi
>>> 3.141592..
math.sqrt(4)
>>> 2.0
import math as m
m.pi
>>> 3.141592...
# 모듈 중 일부 가져오기
from 모듈 imort 변수, 함수, 클래스, *(전부 다)
ex) from math import pi
pi
>>> 3.142952...
from math import pi, sqrt
urllib.request을 사용해서 웹 클라이언트 프로그램 만들기
urllib.request 모듈에서 가장 기본이 되는 urlopen() 함수를 이용한다.
urlopen(url, data=None)
- url 매개변수는 문자열이거나, Request 클래스의 인스턴스가 올 수 있다.
- data는 요청 방식으로 GET이 디폴트 값이고, Post 요청은 data 인자에 질의 문자열을 지정한다.
GET 방식으로 요청하기
위 프로그램은 웹 브라우저의 주소창에 www.naver.com 이라고 입력하는 것과 동일한 데이터를 웹 서버에 요청해서 가져온다. 그러나 웹 브라우저는 HTML 형식의 데이터를 화면에 보기 좋게 보여주는 것 뿐이고, 위의 웹 클라이언트 프로그램은 HTML 형식의 데이터를 디자인 없이 그대로 보여준다는 차이가 있을 뿐이다.
웹 서버에서 받은 데이터를 보면 알 수 없는 내용이 출력되는데, 이는 컴퓨터가 이해하고 있는 바이트 타입을 넘겨줬기 때문이다. 이 형식을 다시 사람이 이해할 수 있는 문자열로 바꿔주기 위해 아래처럼 디코딩이 필요하다.
* 바이트와 유니코드 참고: https://bentist.tistory.com/38