파이썬 프로그래밍

파이썬 requests 요청 쿠키 가져오기 및 사용하는 방법

코니코니 2023. 6. 18. 18:19
반응형

파이썬 requests 요청 쿠키 가져오기 및 사용하는 방법


웹 쿠키는 웹사이트가 사용자의 컴퓨터에 저장하는 작은 텍스트 파일입니다. 쿠키는 웹사이트가 사용자의 방문 기록을 추적하고, 사용자의 로그인 상태를 유지하고, 사용자의 개인 설정을 저장하는 데 사용됩니다. 쿠키는 또한 웹사이트가 사용자에게 더 관련성이 높은 콘텐츠를 제공하는 데 사용됩니다.

쿠키는 두 가지 유형이 있습니다. 첫 번째 유형은 세션 쿠키로, 사용자가 웹사이트를 방문하는 동안만 지속됩니다. 세션 쿠키는 사용자가 웹사이트를 벗어나면 삭제됩니다. 두 번째 유형은 영구 쿠키로, 사용자가 웹사이트를 방문하는 동안 지속됩니다. 영구 쿠키는 사용자가 웹사이트를 벗어나더라도 삭제되지 않습니다.

쿠키는 사용자의 개인 정보를 수집하지 않습니다. 쿠키는 웹사이트가 사용자의 방문 기록을 추적하고, 사용자의 로그인 상태를 유지하고, 사용자의 개인 설정을 저장하는 데만 사용됩니다.

이러한 쿠키를 파이썬 requests 모듈을 사용하여 저장을 시키고 다시 가져와서 사용을 할 수 있습니다.

예를 들어 로그인 세션 정보가 들어있는 쿠키를 저장하고 나중에 불러왔을 때 로그인이 되어있는 상태로 접속을 한다거나 검색 기록 등을 유지한 상태를 가져올 수도 있습니다.

import requests
import pickle

s = requests.session()
s.get('https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q=abc')
print(s.cookies.get_dict())

==결과==
{'DDT': 'IIMZ_VOIZ_MS2Z_DICZ_', 'DTQUERY': 'abc', 'ODT': 'IVRZ_TWAZ_1DVZ_GG2Z_NNSZ_LB2Z_SNPZ_', '_ksk': 'ZI7Epn3bnbonFsf9XNu7ewAAALI', 'uvkey': 'ZI7Epn3bnbonFsf9XNu7ewAAALI'}

사용 방법은 매우 간단합니다. 일단 요청에서 session 기능을 사용하여 특정 사이트에 들어갑니다. 다음 사이트를 가정했을 때 검색 페이지에 get을 한 후 cookies.get_dict() 함수를 불러오면 생성된 쿠키 값이 출력되는 것을 볼 수 있습니다. 이러한 쿠키는 하나의 사용자를 나타낼 수 있겠죠.

s = requests.session()
s.get('https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q=abc')

# 쿠키 저장
with open(fr'cookie_save', 'wb') as fc:
    pickle.dump(s.cookies, fc)

세션에서 페이지를 접속한 후 pickle.dump() 기능을 사용하여 cookie_save라는 파일명으로 저장을 시킵니다.

이렇게 생성된 쿠키 파일을 다시 불러와서 사용을 할 수 있습니다.

# 쿠키 불러오기
with open(fr"cookie_save.", 'rb') as f:
    cookie_load = pickle.load(f)

# 새로운 세션 생성
new_s = requests.session()
# 쿠키 불러오기
new_s.cookies.update(cookie_load)

print(new_s.cookies.get_dict())

==결과==
{'DDT': 'IIMZ_VOIZ_MS2Z_DICZ_', 'DTQUERY': 'abc', 'ODT': 'IVRZ_TWAZ_1DVZ_GG2Z_NNSZ_LB2Z_SNPZ_', '_ksk': 'ZI7I3HiSzjc-iH9v4v2-HwAAAFc', 'uvkey': 'ZI7I3HiSzjc-iH9v4v2-HwAAAFc'}

pickle.load()  기능을 사용하여 쿠키 데이터를 가져온 뒤 새로운 세션을 만들어서 cookies.update() 기능으로 쿠키를 가져옵니다. 그러면 기존에 생성을 했던 쿠키를 그대로 가져와 출력이 되는 것을 볼 수 있습니다.

 

전체 코드는 아래와 같습니다.

import requests
import pickle


s = requests.session()
s.get('https://search.daum.net/search?w=tot&DA=YZR&t__nil_searchbox=btn&sug=&sugo=&sq=&o=&q=abc')

# 쿠키 저장
with open(fr'cookie_save', 'wb') as fc:
    pickle.dump(s.cookies, fc)

# 쿠키 불러오기
with open(fr"cookie_save.", 'rb') as f:
    cookie_load = pickle.load(f)

# 새로운 세션 생성
new_s = requests.session()
# 쿠키 불러오기
new_s.cookies.update(cookie_load)

print(new_s.cookies.get_dict())

위 테스트 코드는 단순하게 페이지에 접속을 했던 이력이 있는 쿠키를 가져온 것이고 셀레니움에서 로그인 쿠키를 가져와서 사용을 할 수도 있습니다.

from selenium import webdriver
import requests


path = 'chromedriver.exe'
driver = webdriver.Chrome(path)
driver.get('https://www.daum.net/')
input('다음 로그인 후 엔터')

# 셀레니움에서 로그인 쿠키 변수에 저장
get_ck = driver.get_cookies()

# 세션 생성
s = requests.session()

# 세션에 로그인 쿠키 넣기
for cookie in get_ck:
    s.cookies.set(cookie['name'], cookie['value'])

셀레니움에서 로그인을 시도한 뒤 셀레니움 쿠키를 가져와서 requests 세션에서 사용하는 방법입니다.

 

셀레니움을 사용하지 않고 requests 자체만으로도 로그인을 시도하고 쿠키를 저장할 수 있겠지만 로그인 부분의 경우에는 절차가 조금 복잡하다 보니 가장 간편하고 쉬운 방법은 셀레니움으로 직접 로그인을 시도하고 쿠키를 가져오는 것이죠.

반응형