BeautifulSoup4 (2)

honeyricecake·2022년 7월 15일
0

백준 by 파이썬

목록 보기
5/8
  1. GET방식과 POST방식

참고한 링크 : https://mommoo.tistory.com/60

클라이언트가 서버에게 웹페이지를 보여달라고 말하는 것은 '요청', 서버가 클라이언트에게 요청받은 것에 대한 대답으로 웹페이지 내용을 표현하기 위해 html문서를 주는 것을 '응답'이라고 부른다.

GET방식 : 클라이언트의 데이터를 URL뒤에 붙여서 보낸다.

www.example.com?id=mommoo&pass=1234 를 예로 들자.

?뒤가 정보이고 id=mommoo, pass=1234 이 각각의 항목이다.
(key - value쌍)

이는 보안상의 문제점이 있고 용량의 한계도 있어

아이디, 비밀번호 또는 파일 등의 용량이 큰 데이터를 보낼 때는 POST방식을 쓴다.

쿠팡은 링크
https://www.coupang.com/np/search?q=%EB%85%B8%ED%8A%B8%EB%B6%81&channel=user&component=&eventCategory=SRP&trcid=&traid=&sorter=scoreDesc&minPrice=&maxPrice=&priceRange=&filterType=&listSize=36&filter=&isPriceRange=false&brand=&offerCondition=&rating=0&page=2&rocketAll=false&searchIndexingToken=1=5&backgroundColor=
를 보면 판매항목 페이지를 요청할 때는 GET방식을 사용함을 알 수 있다.

import requests
from bs4 import BeautifulSoup

url = "https://www.coupang.com/np/search?q=%EB%85%B8%ED%8A%B8%EB%B6%81&channel=user&component=&eventCategory=SRP&trcid=&traid=&sorter=scoreDesc&minPrice=&maxPrice=&priceRange=&filterType=&listSize=36&filter=&isPriceRange=false&brand=&offerCondition=&rating=0&page=2&rocketAll=false&searchIndexingToken=1=5&backgroundColor="
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"}
cookies = {"":""}  # 아예 비어있으면 내용 변환을 안 함

res = requests.get(url, headers=headers, cookies=cookies)
res.raise_for_status()
soup = BeautifulSoup(res.text, "lxml")
print(res.text)

강의대로하니 안 돼서 애를 먹었다.
UserAgent만 바꾼다고 되는게 아니라 아예 쿠키까지 비워야한다.

  1. POST로 데이터 넘기기

post방식은 다음과 같은 특징이 있다.

클라이언트와 서버 간에 스트링 형태로 그대로 서버에 전달되지 않고 '인코딩'이라는 과정을 거친다.

헤더를 통해 요청이 전송되는 방식이다.

이 때문에 GET방식과 같이 URL이 노출되지 않습니다.

요청 시 GET 보다 더 많은 양의 정보를 교환할 수 있다.

페이지에서 날짜를 설정하고 조회하기 버튼을 눌렀을 때 서버는 DB에서 해당 기간에 해당되는 정보를 불러와 우리에게 보여준다. 이 때 사용되는 방식이 바로 POST 방식이다.
조회하기 버튼을 눌렀을 때 URL이 클라이언트에게 노출이 되지 않으며, GET방식에 비해 더 많은 양의 정보를 받아올 수 있다는 장점이 있다.

BODY에 데이터를 key - value 형식으로 넣어서 전송한다.
그래서 get방식처럼 주소창만 보고 전송하는 데이터를 추측할 수 없다.

ex.

import requests

payload = {'key1':'value1','key2':'value2'}

r = requests.post("~~~~", data = payload)
print(r.text)

0개의 댓글