1강 보러가기 - Requests User Agent, Header 변경하는 방법 기초 강의
2강 보러가기 - Requests Proxy Server 사용하는 방법
네이버 카페에 가입되어 있는 목록(내 카페 리스트)을 requests 라이브러리를 통해 받아오는 예시입니다. 다만, 네이버에 로그인을 하지 않은 상태에서는 해당 정보를 조회할 수 없기 때문에, Selenium을 이용해 한 번 네이버에 로그인하고, 로그인 후 얻은 쿠키를 requests 요청에 넣어주는 방식으로 동작합니다.
1. Selenium으로 쿠키 가져와서
2. requests에 활용해주는게 저희 목표입니다
강의 보면서 따라만들기
1. 전체 코드 구조
코드는 크게 두 부분으로 나뉩니다.
1) extract_my_cafe_list(cookie=None)
- 네이버 카페 목록을 가져오는 함수
- 쿠키 정보를 옵션으로 받음(없으면 로그인 안 된 상태로 시도)
2) naver_login()
- Selenium으로 네이버 로그인 페이지를 열고, 직접 로그인하도록 유도
- 로그인 후 생성된 쿠키를 딕셔너리 형태로 반환
이후, 로그인 쿠키 없이 먼저 카페 리스트를 받아보고, 그 다음 로그인 쿠키를 포함해 카페 리스트를 받아보는 순서로 동작합니다.
2. extract_my_cafe_list(cookie=None)
함수
def extract_my_cafe_list(cookie=None):
cafe_list_mobile_api = "https://apis.naver.com/cafe-home-web/cafe-home/v1/cafes/join?perPage=300"
response = requests.get(cafe_list_mobile_api, cookies=cookie)
response_json = response.json()
try:
mycafelist = response_json['message']['result']['cafes']
except:
print(response_json['message'])
return []
my_cafe_name_list = []
for cafe in mycafelist:
my_cafe_name_list.append(cafe['cafeName'])
return my_cafe_name_list
2-1. 코드 설명
cafe_list_mobile_api
네이버 카페 목록을 가져올 수 있는 주소(API Endpoint)입니다.perPage=300
은 한 번에 최대 300개의 카페 목록을 가져오겠다는 의미입니다.
response = requests.get(cafe_list_mobile_api, cookies=cookie)
- requests 라이브러리를 사용해 GET 요청을 보냅니다.
cookies=cookie
부분이 핵심입니다. 만약 로그인된 쿠키가 있다면, 네이버 서버는 이를 보고 “로그인한 유저구나!” 라고 인식해, 실제 가입된 카페 목록을 응답해줍니다.- 쿠키가 없다면, 응답 메시지가 로그인되지 않았다는 메시지(또는 권한 없음 등)일 가능성이 큽니다.
response_json = response.json()
- 응답 결과를 JSON 형태로 파이썬에서 사용하기 쉽게 변환합니다.
mycafelist = response_json['message']['result']['cafes']
- 실제 카페 목록 부분만 추출합니다.
- 만약 응답 구조가 달라진다면
KeyError
가 날 수 있으므로try-except
로 감싸 에러를 처리합니다.
return my_cafe_name_list
- 카페 이름만 추출해 리스트로 반환합니다.
- 실제로는 카페명 외에도 다양한 정보(카페 ID 등)를 함께 가지고 오면 좋지만, 여기서는 이름만 가져옵니다.
3. naver_login()
함수
def naver_login():
driver = webdriver.Chrome()
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com")
time.sleep(3)
print("네이버 로그인이 완료되면 콘솔에 엔터를 눌러주세요")
input()
# 로그인 후 쿠키 저장
cookie = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
print("수동 로그인 완료, 쿠키 저장됨:", cookie)
return cookie
3-1. 코드 설명
driver = webdriver.Chrome()
- Selenium WebDriver를 사용해 Chrome 브라우저를 실행합니다.
- 실행 전, 크롬드라이버(ChromeDriver)가 설치/설정되어 있어야 합니다.
- Windows, Mac, Linux 환경에 따라 설정 방법이 다를 수 있으니, ChromeDriver 다운로드를 통해 환경에 맞는 드라이버를 받아주세요.
driver.get("네이버 로그인 페이지 주소")
- 네이버 로그인 페이지를 엽니다.
time.sleep(3)
- 페이지가 완전히 로딩되도록 잠시 대기합니다. (필요에 따라 시간 조절 가능)
print("네이버 로그인이 완료되면...")
- 여기서 직접 아이디와 비밀번호를 입력해 네이버 로그인을 마칩니다.
- 로그인 2차 인증(문자인증 등)이 있다면 그 과정도 직접 수행해야 합니다.
input()
- 콘솔에서 엔터를 누를 때까지 대기합니다.
- 이 시점에 본인 계정으로 로그인된 상태가 됩니다.
cookie = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
- 로그인 성공 후 브라우저에 저장된 모든 쿠키를 가져옵니다.
{쿠키이름: 쿠키값}
형태의 딕셔너리로 변환합니다.- 이를 requests 라이브러리에 전달할 수 있는 형태로 만듭니다.
return cookie
- 이 쿠키 정보를
extract_my_cafe_list
함수로 넘겨, 로그인된 상태로 API 요청할 수 있게끔 만듭니다.
- 이 쿠키 정보를
4. 전체 코드 실행 흐름
# 1. 로그인 쿠키 없이 내 카페 리스트 요청
my_cafe_list = extract_my_cafe_list()
print(my_cafe_list)
print("로그인 쿠키 없이 요청한 결과")
print("******************************")
# 2. 로그인 쿠키와 함께 Requests로 내 카페 리스트 요청
cookie = naver_login()
my_cafe_list = extract_my_cafe_list(cookie)
for cafe_name in my_cafe_list:
print(cafe_name)
print("로그인 쿠키와 함께 요청한 결과")
- 로그인 쿠키 없이
extract_my_cafe_list()
함수를 호출- 쿠키를 전달하지 않으므로, 네이버에 로그인된 상태가 아니라고 간주되어, 제대로 된 카페 목록을 얻지 못할 확률이 큽니다.
- 보통 빈 리스트([]) 또는 권한 오류 메시지 등이 나옵니다.
- 로그인 후 쿠키를 얻음
cookie = naver_login()
을 통해, 실제 네이버에 접속 후 로그인하고 쿠키를 가져옵니다.
- 쿠키와 함께 다시
extract_my_cafe_list(cookie)
함수를 호출- 로그인 상태의 쿠키가 있기 때문에, 서버가 정상적으로 “가입한 카페 리스트” 정보를 반환합니다.
- 가입된 카페의 이름들이 목록으로 출력될 것입니다.
5. 주의사항 및 팁
- 크롬드라이버 버전 맞추기
- 사용하는 크롬 버전과 크롬드라이버 버전이 달라 오류가 날 수 있으니, 버전을 맞춰 설치해주세요.
- 2단계 인증
- 네이버에서 2단계 인증(OTP/문자인증 등)을 사용하는 경우, 로그인 과정에서 직접 처리해주어야 합니다.
- 보안 이슈
- 실제로 서비스에 적용할 때는 쿠키나 아이디/비밀번호 관리를 주의 깊게 해야 합니다.
- 이 예제는 학습 목적이므로, 꼭 필요한 경우가 아니면 이런 식의 크롤링이나 수동 로그인 방식을 지양할 수 있습니다.
- requests 대신 다른 라이브러리
- 기본 원리는 동일합니다. HTTP 요청 시 로그인된 쿠키를 함께 실어 보내면, 서버는 해당 요청을 로그인된 사용자로 인식합니다.
- API가 변경될 수 있음
- 네이버의 내부 API인
https://apis.naver.com/cafe-home-web/cafe-home/v1/cafes/join?perPage=300
경로가 언제든 바뀔 수 있으므로, 실제로는 공식 문서를 참조하거나 변경사항을 유의해야 합니다.
- 네이버의 내부 API인
마무리
위 코드를 통해 네이버에 직접 로그인 → 로그인 후 쿠키 획득 → 쿠키를 포함해 내 카페 목록 API에 접근하는 전 과정을 살펴보았습니다. 핵심 아이디어는 “한 번 로그인을 하고, 그 세션을 유지하는 쿠키를 이용해 서버에 로그인된 요청을 보내기”입니다.
개발 초보자라면 다음 과정을 꼭 확인해 보세요.
- ChromeDriver 설치
- Selenium으로 웹페이지 열기
- 로그인 후 쿠키 확인
- requests에 쿠키를 실어 보내기
이 과정을 통해 웹 자동화, 크롤링, 그리고 쿠키/세션의 개념을 이해하는 데 큰 도움이 되길 바랍니다.
'Python Requests 기초 강의' 카테고리의 다른 글
[파이썬] proxy python requests - [4강/소스코드] (0) | 2025.01.07 |
---|---|
get cookie selenium python, requests 기초강의 3강 소스코드 (0) | 2025.01.06 |
Python Requests Session 사용법, 속도와 효율 모두 잡기 (0) | 2025.01.04 |
Python requests 기초 강의 proxy server 사용하는 방법 [2강/2025년] (0) | 2024.12.31 |
파이썬 requests 기초 강의 proxy, user-agent 바꾸는 법 [1강/2025년 버전] (0) | 2024.12.30 |