절대경로
: 전체경로
상대경로
: 특정 위치를 기준으로 경로
urllib.parse.urljoin()
: 상대경로를 절대경로로 변환하는 함수
from urllib.parse import urljoin
baseUrl = "http://www.example.com/html/a.html"
# 절대경로를 기준으로 상대경로가 잡힘
print(urljoin(baseUrl, "b.html"))
print(urljoin(baseUrl, "sub/c.html"))
print(urljoin(baseUrl, "../index.html"))
print(urljoin(baseUrl, "../image/a.png"))
print(urljoin(baseUrl, "../css/style.css"))
# urljoin 두 번째 매개 변수에 상대경로가 아닌 절대경로를
# 지정하는 경우("http://~") baseUrl은 의미가 없게 됨
print(urljoin(baseUrl, "http://www.other.com/aa"))
print(urljoin(baseUrl, "//www.another.com/bb/index.html"))
Http 통신의 특성
: Connectionless - 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 response를 보낸다.
그리고 접속을 끊는 특성
: Stateless - 접속을 끊는 순간 클라이언트와 서버의 통신은 끝나고 상태정보는 유지하지 않는 특성
: Cookie - 쿠키는 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일
쿠키는 이름, 값, 만료 날짜(쿠키의 저장기간), 경로정보가 들어있다.
쿠키는 일정시간동안 데이터를 저장할 수 있어서 로그인 상태를 유지한다.
쿠키는 클라이언트의 상태정보를 유저의 하드 디스크에 저장하였다가 필요할 때 참조, 재사용한다.
ex) 팝업창이 뜰 때 "오늘 하루 보지 않음"을 체크하면 오늘은 창이 뜨지 않는다.
방문사이트에서 아이디와 비밀번호를 저장하겠습니까?라고 메시지가 나오면 쿠키에 저장하겠냐라는 의미이다
세션(Session)
: 세션은 클라이언트와 웹 서버간 네트워크 연결이 지속 유지되고 있는 상태를 말한다.
: 즉, 사용자가 브라우저를 열어 서버에 접속한 뒤 접속을 종료할 때까지를 말한다
: HTTP프로토콜은 비접속형 프로토콜이기에, 매 접속시마다 새로운 네트워크 연결이 이루어지는데,
세션이 연결유지를 가능하게 해준다.
: 클라이언트가 Request를 보내면 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데, 이 ID를 세션이라 한다.
: 세션 ID는 임시로 저장하여 페이지 이동시 이용하거나, 클라이언트를 유일하게 구분하는 수단이 된다.
Session 원리
: 세션ID를 서버에서 클라이언트가 웹 사이트에 접속시 발급해준다.
: 서버에서 클라이언트로 발급해준 세션ID를 쿠키를 사용해서 저장한다
: 클라이언트는 다시 접속시 이 쿠키를 이용해서 세션ID값을 서버에 전달한다.
세션의 장점
: 각 클라이언트에게 고유ID를 부여한다.
: 세션ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비르를 제공할 수 있다.
: 사용했던 정보들을 서버에 저장하기 때문에 보안 상 쿠키보다 우수하다
세션의 단점
: 서버에 저장되는 세션때문에 서버에 처리를 요구하는 부하와 저장공간을 필요로 한다.
쿠키와 세션의 차이점
: 큰 차이점은 저장되는 위치이다
: 쿠키는 클라이언트에 저장되어서 보내는 역할을 하고
: 세션은 서버에 저장됭서 클라이언트에게 알려줘서 사용한다
requests
: 쿠키, 세션을 통해 사용을 해야할 경우 필요
pip install requests
requests 모듈
import requests
#http에서 사용하는 데이터 전송방식 GET, POST 방식이 있는데 두 방식의 메소드를 제공
r = requests.get("http://google.com") #get 방식의 요청을 하는 경우
#POST 요청
formData = {"key1": "value1", "key2": "value2"}
r = requests.post("http://sample.com", data = formData)
텍스트 데이터 가져오기
import requests
rssData = requests.get("http://api.aoikujira.com/time/get.php")
# 텍스트 형식으로 출력하기
txt = rssData.text
print("txt : ", txt)
# 바이너리 형식으로 출력하기
bin = rssData.content
print("bin : ", bin)
이미지 데이터 가져오기
import requests
res = requests.get("https://t1.daumcdn.net/daumtop_chanel/op/20200723055344399.png")
# 바이너리 형식으로 이미지 저장하기
with open("logo.png", "wb") as f:
f.write(res.content)
print("이미지 파일이 저장되었습니다.")
'Python > python' 카테고리의 다른 글
WEB 데이터 형식 (0) | 2020.11.13 |
---|---|
Selenium (0) | 2020.11.09 |
Python을 이용한 데이터 시각화 (0) | 2020.11.03 |
예외 처리 사용하기 (0) | 2020.10.20 |
클래스 상속 사용하기 (0) | 2020.10.19 |