일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코틀린
- NIO
- 유닉스
- Database
- python
- 웹 크롤링
- GPT-4's answer
- 자바
- lombok
- 리눅스
- oracle
- 뉴턴역학
- 소프트웨어공학
- Java
- 고전역학
- flet
- 인프라
- kotlin
- 시스템
- 자바암호
- Spring boot
- write by chatGPT
- android
- JVM
- GIT
- 파이썬
- chatGPT's answer
- 자바네트워크
- write by GPT-4
- 역학
- Today
- Total
Akashic Records
Python 사용자 인증 (Session) 받기 본문
사용자 인증이 필요한 웹사이트를 크롤링할 때는 일반적으로 로그인 세션을 유지하는 방법이 필요합니다. 이는 주로 requests
라이브러리의 Session
객체를 사용하여 처리할 수 있습니다. Session
객체는 서버와의 연결에서 쿠키를 자동으로 처리하고, 동일한 세션 상태를 여러 요청에 걸쳐 유지합니다. 이 방법을 사용하면 로그인이 필요한 페이지에서 데이터를 크롤링할 수 있습니다.
예제: 로그인이 필요한 사이트 크롤링
아래는 로그인이 필요한 웹사이트에 로그인하고 데이터를 추출하는 기본적인 코드 예제입니다. 예제에서는 아이디와 패스워드를 사용하여 로그인을 수행하고, 이후에 인증된 세션을 통해 접근이 제한된 페이지의 데이터를 크롤링합니다.
import requests
from bs4 import BeautifulSoup
def fetch_web_data(url):
# URL에서 웹 페이지를 가져옵니다.
response = session.get(url)
# 응답이 성공적인지 확인합니다. (HTTP 200 OK)
if response.status_code == 200:
return response.text
else:
return None
def extract_title(html_content):
# HTML 컨텐츠를 파싱하여 BeautifulSoup 객체를 생성합니다.
soup = BeautifulSoup(html_content, 'html.parser')
# <title> 태그의 내용을 추출합니다.
title_tag = soup.find('title')
if title_tag:
return title_tag.text
else:
return "No title found"
# 로그인 정보와 URL 설정
LOGIN_URL = "http://localhost:8088/api/user/login"
USERNAME = "admin"
PASSWORD = "xxxxxx"
DATA_URL = "http://localhost:8088/swagger-ui/index.html"
login_data = {
'username': USERNAME,
'password': PASSWORD
}
# Session 객체 생성
session = requests.Session()
# 로그인 요청 (Content-Type: application/json)
response = session.post(LOGIN_URL, json=login_data)
response.raise_for_status() # 로그인 실패 시 예외 발생
# 세션의 헤더 출력
print("Headers:")
print(session.headers)
# 세션의 쿠키 출력
print("Cookies:")
print(session.cookies)
# 세션의 기본 설정된 SSL 인증 옵션 출력
print("SSL Verification:")
print(session.verify)
# 세션에 설정된 프록시 출력 (기본적으로 비어있음)
print("Proxies:")
print(session.proxies)
print("Response Headers:")
print(response.headers)
html_content = fetch_web_data(DATA_URL)
if html_content:
title = extract_title(html_content)
print("Page Title:", title)
else:
print("Failed to retrieve the web page.")
application/json
타입으로 로그인 요청을 보내려면, requests
라이브러리를 사용하여 HTTP 요청 시 json
매개변수를 사용하고, 적절한 Content-Type
헤더를 설정해야 합니다. 아래 코드는 application/json
타입으로 로그인 데이터를 전송하는 방법을 보여줍니다. 이 방식은 서버가 JSON 형식의 요청 본문을 처리할 수 있을 때 사용할 수 있습니다.
코드 설명
json=login_data
:requests.post
메소드에json
매개변수를 사용하면,requests
는 자동으로 데이터를 JSON 형식으로 변환하고,Content-Type
헤더를application/json
으로 설정합니다. 이렇게 하면 서버에 JSON 형식의 데이터가 전송됩니다.session.post(LOGIN_URL, json=login_data)
: 이 줄에서 서버로 로그인 요청을 보냅니다.session
객체를 사용하면 쿠키와 헤더 등의 상태가 자동으로 관리됩니다.response.raise_for_status()
: 이 메소드는 응답 코드가 400 또는 500대 오류일 경우 예외를 발생시킵니다. 이를 통해 요청이 실패했을 때 적절한 오류 처리를 할 수 있습니다.session.headers
: 세션의 HTTP 헤더를 보여줍니다. 기본적으로requests
는 사용자 에이전트와 관련된 몇 가지 기본 헤더를 설정합니다.session.cookies
: 세션과 관련된 쿠키를 보여줍니다. 로그인 과정에서 서버가 세션 쿠키를 설정하면, 이 쿠키는 자동으로 저장되어 이후 요청에 사용됩니다.session.verify
: SSL 인증서 검증 여부를 나타냅니다. 기본적으로True
로 설정되어 있어 HTTPS 요청 시 인증서 검증을 수행합니다.session.proxies
: 세션에 설정된 프록시를 보여줍니다. 프록시를 사용하는 경우, 이곳에 설정 정보가 저장됩니다.
이 코드 스니펫은 세션 객체의 다양한 속성을 출력하여, 세션의 현재 상태를 이해하는 데 도움을 줍니다. 실제로 세션의 동작을 이해하고 싶다면, 이러한 정보들을 로깅하거나 디버깅 시에 참고할 수 있습니다.
requests
라이브러리에서 Session
API는 여러 개의 요청에 걸쳐 일정한 상태를 유지할 수 있도록 해주는 기능을 제공합니다. Session
객체는 쿠키를 자동으로 저장하고, 사용자가 커스텀 헤더를 지정하거나 기본 인증 설정, 프록시 설정 등을 한번에 처리할 수 있게 해줍니다. 이렇게 함으로써, HTTP 요청을 보내는 동안 일관된 상태를 유지하며, 연결을 재사용하여 효율성을 높일 수 있습니다.
Session API의 주요 기능
- 쿠키 관리:
Session
객체는 서버로부터 받은 쿠키를 자동으로 저장하고, 이후의 요청에 이 쿠키를 사용합니다. 이를 통해 로그인 상태 유지와 같은 인증 메커니즘이 필요한 웹 페이지 상호 작용이 가능해집니다. - 헤더 관리: 헤더는 HTTP 요청을 보낼 때 서버에 제공하는 추가 정보입니다.
Session
을 사용하면 모든 요청에 공통적으로 사용되는 헤더를 설정할 수 있습니다. 예를 들어, 모든 요청에 사용자 에이전트를 추가하거나, 컨텐츠 유형을 지정할 수 있습니다. - SSL 인증: HTTPS 요청을 할 때 SSL 인증서 검증을 설정할 수 있습니다.
verify
속성을 통해 인증서 검증을 활성화하거나 비활성화할 수 있으며, 특정 인증서를 사용하여 요청을 할 수도 있습니다. - 프록시 지원:
Session
을 사용하여 프록시 서버를 통해 요청을 보낼 수 있습니다. 이는 프록시 설정을 한 번만 지정하면 그 이후의 모든 요청에 자동으로 적용됩니다. - 연결 풀링과 지속적인 연결:
Session
객체는 연결 풀링을 사용하여 HTTP 연결을 재사용합니다. 이는 여러 요청을 빠르게 처리할 수 있게 하며, 네트워크 지연 시간을 줄여줍니다.
'Web Crawling for Beginners' 카테고리의 다른 글
학습사이트 http://books.toscrape.com 크롤링 결과 DB 저장 (0) | 2024.04.26 |
---|---|
Python 사용자 인증 (JWT) 받기 (0) | 2024.04.25 |
학습사이트 http://quotes.toscrape.com/ BFS 크롤링 (0) | 2024.04.24 |
학습사이트 http://books.toscrape.com BFS 크롤링 (0) | 2024.04.24 |
URL 깊이 우선 탐색(DFS) 웹 크롤러 (0) | 2024.04.24 |