[Python 크롤러] 간단하고 강력한 요청 라이브러리

여기에 이미지 설명 삽입

1. 소개

최신 웹 개발에서 서버와의 HTTP 통신은 중요한 작업입니다. Python의 요청 라이브러리는 HTTP 요청을 매우 쉽게 보낼 수 있는 간결한 API를 제공하는 간단하고 강력한 타사 라이브러리입니다. 이 자습서에서는 Python 요청 라이브러리를 사용하여 다양한 유형의 HTTP 요청을 보내고 응답을 처리하는 방법을 보여줍니다.

1.1 HTTP 요청 및 응답

시작하기 전에 HTTP 요청 및 응답의 기본 개념을 간략하게 이해하겠습니다. HTTP는 클라이언트와 서버 간의 통신을 위한 프로토콜입니다. 클라이언트는 서버에 요청을 보내고 서버는 해당 응답을 반환합니다. 요청에는 메서드(GET, POST 등), URL, 요청 헤더, 요청 본문 등의 정보가 포함되고 응답에는 상태 코드, 응답 헤더, 응답 본문 등의 정보가 포함됩니다.

1.2 Python 요청 라이브러리의 역할과 이점

Python 요청 라이브러리는 HTTP 요청을 보내고 응답을 처리하는 데 널리 사용되는 타사 라이브러리입니다. 요청 전송을 매우 간단하게 만드는 깨끗한 API를 제공합니다. 일부 Python 내장 HTTP 라이브러리(예: urllib)도 비슷한 작업을 수행할 수 있지만 Requests 라이브러리는 사용하기 쉽고 더 많은 기능과 유연성을 제공합니다.

1.3 요청 라이브러리 설치

시작하기 전에 Python 인터프리터가 설치되어 있는지 확인하십시오. 요청 라이브러리를 설치하려면 pip 명령을 사용하여 다음 지침을 실행할 수 있습니다.

pip install requests

설치가 완료되면 요청 라이브러리를 사용하여 HTTP 요청 전송을 시작할 수 있습니다.

2. GET 요청 보내기

GET 요청은 서버에서 데이터를 가져오는 데 사용됩니다. 다음은 일반적인 GET 요청의 몇 가지 예입니다.

2.1 기본 GET 요청 보내기

요청 라이브러리를 사용하면 간단한 GET 요청을 보내는 것이 매우 쉽습니다. 대상 URL을 제공하십시오.

import requests

response = requests.get('https://api.example.com/data')
print(response.text)

위의 코드는 https://api.example.com/data에 GET 요청을 보내고 응답 내용을 출력합니다.

2.2 쿼리 매개변수 추가

경우에 따라 특정 데이터를 얻기 위해 쿼리 매개변수를 URL에 추가해야 합니다. params매개변수를 사용하여 쿼리 매개변수를 지정할 수 있습니다 .

import requests

payload = {
    
    'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com/data', params=payload)
print(response.text)

위의 코드는 쿼리 매개변수 key1=value1key2=value2URL을 추가합니다.

2.3 요청 헤더 설정

요청 헤더에는 User-Agent, Accept 등과 같은 요청에 대한 추가 정보가 포함됩니다. headers매개변수를 사용하여 요청 헤더를 설정할 수 있습니다 .

import requests

headers = {
    
    'User-Agent': 'Mozilla/5.0'}
response = requests.get('https://api.example.com/data', headers=headers)
print(response.text)

위의 코드는 User-Agent 요청 헤더를 설정하여 요청을 보내는 브라우저를 시뮬레이트합니다.

2.4 응답 처리

응답을 받으면 이에 대해 다양한 작업을 수행할 수 있습니다. 예를 들어 상태 코드, 헤더 정보 및 응답 내용을 얻을 수 있습니다.

import requests

response

 = requests.get('https://api.example.com/data')
print(response.status_code)  # 打印状态码
print(response.headers)      # 打印响应头
print(response.text)         # 打印响应内容

위의 코드는 상태 코드, 응답 헤더 및 응답 내용을 가져오는 방법을 보여줍니다.

3. POST 요청 보내기

POST 요청은 데이터를 서버에 제출하는 데 사용됩니다. 다음은 일반적인 POST 요청의 몇 가지 예입니다.

3.1 기본 POST 요청 보내기

요청 라이브러리를 사용하면 간단한 POST 요청을 보내는 것도 쉽습니다. 목적지 URL과 전송할 데이터를 제공하기만 하면 됩니다.

import requests

payload = {
    
    'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://api.example.com/submit', data=payload)
print(response.text)

위의 코드는 https://api.example.com/submit에 POST 요청을 보내고 응답 내용을 출력합니다.

3.2 양식 데이터 보내기

웹 개발에서 양식은 종종 사용자 입력 데이터를 수집하는 데 사용됩니다. data매개변수를 사용하여 양식 데이터를 보낼 수 있습니다 .

import requests

data = {
    
    'username': 'john', 'password': 'secret'}
response = requests.post('https://api.example.com/login', data=data)
print(response.text)

위의 코드는 https://api.example.com/login에 양식 데이터로 사용자 이름과 암호를 보냅니다.

3.3 JSON 데이터 보내기

양식 데이터 전송 외에도 JSON 형식의 데이터도 전송할 수 있습니다. json파라미터를 사용하여 JSON 데이터를 보낼 수 있습니다 .

import requests

data = {
    
    'name': 'John Doe', 'age': 30}
response = requests.post('https://api.example.com/user', json=data)
print(response.text)

위의 코드는 data사전을 JSON 형식으로 변환하여 https://api.example.com/user로 보냅니다.

3.4 응답 처리

GET 요청과 유사하게 POST 요청의 응답에 대해 다양한 작업을 수행할 수도 있습니다. 예를 들어 상태 코드, 헤더 정보 및 콘텐츠를 가져옵니다.

import requests

response = requests.post('https://api.example.com/submit', data={
    
    'key': 'value'})
print(response.status_code)  # 打印状态码
print(response.headers)      # 打印响应头
print(response.text)         # 打印响应内容

위의 코드는 POST 요청의 응답 정보를 얻는 방법을 보여줍니다.

4. 세션 관리 요청

경우에 따라 세션 상태를 유지하거나 쿠키를 처리해야 할 수도 있습니다. 요청 라이브러리는 이러한 상황을 처리하기 위해 세션 개체를 제공합니다.

4.1 세션 개체 사용

세션 개체를 사용하여 여러 요청 간에 상태를 공유합니다. 세션 개체는 쿠키를 유지하고 요청 헤더를 설정하는 등의 작업을 수행할 수 있습니다.

import requests

session = requests.Session()
session.get('https://api.example.com/login')
response = session.get('https://api.example.com/dashboard')
print(response.text)

위의 코드는 세션 개체를 생성하고 로그인 후 세션을 유지한 다음 대시보드 페이지에 또 다른 요청을 보냅니다.

4.2 세션 상태 유지

세션 개체는 자동으로 쿠키를 유지하고 후속 요청에서 자동으로 보냅니다. 이는 사용자 로그인을 시뮬레이션하고 연속 요청을 만드는 데 유용합니다.

import requests

session = requests.Session()
login_data =

 {
    
    'username': 'john', 'password': 'secret'}
session.post('https://api.example.com/login', data=login_data)
response = session.get('https://api.example.com/dashboard')
print(response.text)

위의 코드는 로그인 후 세션 상태를 유지하고 동일한 세션 개체를 사용하여 후속 요청을 보냅니다.

4.3 쿠키 처리

세션 객체는 또한 쿠키를 편리하게 처리합니다. 현재 세션의 쿠키는 속성을 사용하여 얻 cookies거나 cookies매개변수를 사용하여 사용자 지정 쿠키를 보낼 수 있습니다.

import requests

session = requests.Session()
session.get('https://api.example.com/login')
cookies = session.cookies.get_dict()  # 获取当前会话的Cookie
response = session.get('https://api.example.com/dashboard', cookies=cookies)
print(response.text)

위의 코드는 현재 세션 쿠키를 가져와 대시보드 페이지로 보냅니다.

5. 예외 및 오류 처리

HTTP 요청에서 다양한 예외 및 오류가 발생할 수 있습니다. 요청 라이브러리는 이러한 예외 및 오류를 처리하는 메커니즘을 제공합니다.

5.1 처리 요청 시간 초과

요청 시간이 초과되면 timeout매개변수를 설정하여 요청 대기 시간을 제한할 수 있습니다.

import requests

try:
    response = requests.get('https://api.example.com/data', timeout=5)
    print(response.text)
except requests.Timeout:
    print('请求超时')

위의 코드는 요청 제한 시간을 5초로 설정하고 Timeout예외를 포착합니다.

5.2 연결 오류 처리

서버에 연결하는 중 오류가 발생하면 requests.ConnectionError예외를 잡을 수 있습니다.

import requests

try:
    response = requests.get('https://api.example.com/data')
    print(response.text)
except requests.ConnectionError:
    print('连接错误')

위의 코드는 연결 오류가 발생할 때 예외를 포착합니다.

5.3 HTTP 오류 상태 코드 처리

서버가 잘못된 HTTP 상태 코드를 반환하는 경우 response.raise_for_status()메서드를 사용하여 예외를 throw할 수 있습니다.

import requests

response = requests.get('https://api.example.com/data')
try:
    response.raise_for_status()
    print(response.text)
except requests.HTTPError:
    print('HTTP错误')

위의 코드는 응답의 상태 코드를 확인하고 상태 코드가 2xx가 아닌 경우 예외를 발생시킵니다.

6. 고급 기능 및 확장

기본 HTTP 요청 외에도 요청 라이브러리는 더 복잡한 요구 사항을 충족하기 위해 몇 가지 고급 기능과 확장을 제공합니다.

6.1 파일 업로드 및 다운로드

요청 라이브러리를 사용하면 파일을 쉽게 업로드하고 다운로드할 수 있습니다.

import requests

# 文件上传
files = {
    
    'file': open('data.txt', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)

# 文件下载
response = requests.get('https://api.example.com/download/data.txt')
with open('data.txt', 'wb') as file:
    file.write(response.content)

위의 코드는 파일 업로드 및 다운로드의 예를 보여줍니다.

6.2 SSL 검증 및 인증서

요청 라이브러리는 SSL 확인 및 사용자 지정 인증서를 지원합니다.

import requests

response = requests.get('https://api.example.com', verify=True)  # 开启SSL验证

# 使用自定义证书
response = requests.get('https://api.example.com', cert=('client.crt', 'client.key'))

위의 코드는 SSL 확인을 활성화하고 사용자 지정 인증서를 사용하는 방법을 보여줍니다.

6.3 프록시 설정

프록시 서버를 통해 요청을 보내야 하는 경우 proxies매개변수를 사용하여 프록시를 설정할 수 있습니다.

import requests

proxies = {
    
    'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}
response = requests.get('https://api.example.com', proxies=proxies)

위의 코드는 프록시 서버를 통해 요청을 보냅니다.

7. 모범 사례

7.1 세션 개체 사용

세션 개체를 사용하여 세션 상태를 더 잘 관리하고 여러 관련 요청을 보낼 때 데이터를 공유합니다. 이는 효율성을 높이고 불필요한 작업 중복을 줄입니다. 특히 로그인을 유지하거나 쿠키를 처리해야 하는 상황에서는 세션 개체를 사용하는 것이 매우 편리합니다.

import requests

session = requests.Session()
session.get('https://api.example.com/login')
# 发送其他请求...

7.2 예외 처리

요청을 보낼 때 연결 시간 초과, 서버 오류 등과 같은 비정상적인 상황이 발생할 수 있습니다. 프로그램의 견고성을 보장하기 위해 예외 처리 메커니즘을 사용하여 이러한 예외를 포착하고 처리하는 것이 좋습니다.

import requests

try:
    response = requests.get('https://api.example.com/data', timeout=5)
    response.raise_for_status()
    # 处理响应...
except requests.exceptions.Timeout:
    print('请求超时')
except requests.exceptions.HTTPError:
    print('HTTP错误')
except requests.exceptions.RequestException as e:
    print('请求异常:', str(e))

7.3 제한 시간 설정

요청을 보낼 때 적절한 제한 시간을 설정하는 것이 중요합니다. 대기 시간이 너무 길면 프로그램의 응답 속도에 영향을 미칠 수 있습니다. 매개변수를 설정하여 timeout요청 대기 시간을 제한할 수 있습니다.

import requests

response = requests.get('https://api.example.com/data', timeout=5)

요청이 장기간 차단되지 않도록 특정 상황에 따라 적절한 제한 시간을 설정하는 것이 좋습니다.

7.4 응답 상태 코드 확인

응답을 처리할 때 응답의 상태 코드를 확인해야 하는 경우가 많습니다. 올바른 상태 코드는 요청이 성공했음을 나타내는 반면 잘못된 상태 코드는 해당 처리 조치가 필요할 수 있습니다.

import requests

response = requests.get('https://api.example.com/data')
if response.status_code == 200:
    print('请求成功')
else:
    print('请求失败:', response.status_code)

상태 코드에 따라 요청 재시도, 로깅 또는 예외 발생과 같은 다양한 처리 논리를 채택할 수 있습니다.

8. 자주 묻는 질문

8.1 인증서 확인 실패

경우에 따라 요청된 URL이 HTTPS 프로토콜을 사용하고 인증서 확인이 실패하면 요청 라이브러리에서 requests.exceptions.SSLError예외가 발생할 수 있습니다. 이는 일반적으로 대상 웹사이트의 인증서가 유효하지 않거나 만료되었기 때문입니다.

verify이 문제를 해결하려면 인증서 확인을 건너뛰도록 매개변수를 설정할 수 있습니다 False.

import requests

response = requests.get('https://api.example.com', verify=False)

인증서 확인을 건너뛰는 것은 보안 위험이 있으며 테스트 환경에서만 권장됩니다.

8.2 리디렉션 문제

기본적으로 요청 라이브러리는 리디렉션을 자동으로 처리합니다. 서버가 리디렉션 응답을 반환하면 요청 라이브러리는 자동으로 리디렉션을 따르고 최종 응답 결과를 반환합니다.

import requests

response = requests.get('https://api.example.com/redirect')
print(response.url)   # 打印最终

重定向后的URL

리디렉션을 비활성화해야 하는 경우 allow_redirects매개변수를 로 설정할 수 있습니다 False.

import requests

response = requests.get('https://api.example.com/redirect', allow_redirects=False)
print(response.status_code)   # 打印重定向响应的状态码

8.3 중국어 인코딩 문제

한자가 포함된 요청을 처리할 때 인코딩 문제가 가끔 발생합니다. 왜곡된 문자 또는 인코딩 오류를 방지하기 위해 encodedecode메서드를 사용하여 문자 인코딩을 지정할 수 있습니다.

import requests

response = requests.get('https://api.example.com/data')
response.encoding = 'utf-8'  # 指定字符编码
content = response.text

특정 문자 인코딩에 따라 response.encoding해당 값으로 설정됩니다.

연결 풀이 소진됨

프로그램이 자주 많은 수의 요청을 보내면 연결 풀 고갈 문제가 발생할 수 있습니다. 이때 연결 풀의 크기를 늘려 동시성 성능을 향상시킬 수 있습니다.

import requests

adapter = requests.adapters.HTTPAdapter(pool_connections=100, pool_maxsize=100)
session = requests.Session()
session.mount('https://', adapter)

pool_connections와 적절한 값을 설정하면 pool_maxsize연결 풀의 용량을 늘려 동시 요청이 많은 요구 사항을 충족할 수 있습니다.

9. 요약

이 자습서에서는 Python 요청 라이브러리의 기본 사용법과 고급 기능을 다룹니다. GET 및 POST 요청을 보내고, 응답을 처리하고, 세션 상태를 관리하고, 예외 및 오류를 처리하고, 몇 가지 고급 기능을 탐색하는 방법을 배웠습니다. Requests 라이브러리를 마스터하면 웹 개발에서 HTTP 요청 및 응답 처리를 쉽게 수행할 수 있습니다.

이 튜토리얼의 학습을 통해 Python Requests 라이브러리에 대해 더 깊이 이해하고 다양한 HTTP 통신 요구 사항을 처리하기 위해 유연하게 사용할 수 있기를 바랍니다.

참조 링크:

추천

출처blog.csdn.net/mingfeng4923/article/details/131077681