python中的requests库的详细使用教程

requests 是一个非常流行的 Python HTTP 库,用于发送各种 HTTP 请求,如 GET、POST、PUT、DELETE 等。它简单易用,功能强大,广泛应用于网络爬虫、API 调用等场景。以下是对 requests 库的详细使用方法和一些实用案例的分享。

  1. 安装 requests
    在使用 requests 库之前,需要先安装它。可以通过以下命令安装:
pip install requests
  1. 基本使用方法

2.1 发送 GET 请求

import requests

# 发送 GET 请求
response = requests.get('https://httpbin.org/get')

# 打印响应内容
print(response.text)  # 原始响应内容
print(response.json())  # 如果响应是 JSON 格式,可以直接解析为字典

2.2 发送 POST 请求

import requests

# 发送 POST 请求
data = {'key1': 'value1', 'key2': 'value'}
2response = requests.post('https://httpbin.org/post', data=data)

# 打印响应内容
print(response.text)

2.3 添加请求头
在某些情况下,服务器可能需要特定的请求头(如 User-AgentAuthorization)。

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}

response = requests.get('https://httpbin.org/get', headers=headers)
print(response.text)

2.4 处理响应
requests 提供了多种方法来处理响应数据:

  • 响应状态码:response.status_code
  • 响应头:response.headers
  • 响应内容:
  • 文本内容:response.text
  • JSON 数据:response.json()
  • 二进制内容:response.content

示例:

import requests

response = requests.get('https://httpbin.org/get')

# 打印状态码
print(response.status_code)

# 打印响应头
print(response.headers)

# 打印响应内容
print(response.text)  # 文本内容
print(response.json())  # JSON 数据
print(response.content)  # 二进制内容

2.5 处理异常
在发送请求时可能会遇到网络问题或服务器错误,可以通过捕获异常来处理这些问题。

import requests
from requests.exceptions import HTTPError, ConnectionError

try:
    response = requests.get('https://httpbin.org/status/404')
    response.raise_for_status()  # 如果响应状态码不是 200,会抛出 HTTPError
except HTTPError as http_err:
    print(f'HTTP error occurred: {http_err}')
except ConnectionError as conn_err:
    print(f'Connection error occurred: {conn_err}')
except Exception as err:
    print(f'Other occurred error: {err}')
else:
    print('Success!')

2.6 会话对象(Session)
如果需要在多个请求之间保持某些参数(如 cookies),可以使用 Session 对象。

import requests

# 创建一个 Session 对象
session = requests.Session()

# 发送请求
session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
response = session.get('https://httpbin.org/cookies')

# 打印响应内容
print(response.json())
  1. 高级使用方法

.31 超时设置
在发送请求时,可以设置超时时间,避免请求长时间未响应。

import requests

try:
    response = requests.get('https://httpbin.org/delay/10', timeout=5)
except requests.exceptions.Timeout:
    print('The request timed out')
else:
    print('The request did not time out')

3.2 代理设置
如果需要通过代理服务器发送请求,可以使用 proxies 参数。

import requests

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
print(response.text)

3.3 文件上传
可以使用 files 参数上传文件。

import requests

files = {'file': open('test.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.text)

3.4 流式请求
对于大文件或需要逐块处理的响应,可以使用流式请求。

import requests

response = requests.get('https://httpbin.org/stream/20', stream=True)

for line in response.iter_lines():
    if line:
        decoded_line = line.decode('utf-8')
        print(decoded_line)
  1. 实用案例

案例 1:爬取网页内容

import requests
from bs4 import BeautifulSoup

url = 'https://www.example.com'
response = requests.get(url)

# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(response.text, 'html.parser')

# 提取标题
title = soup.find('title').text
print(title)

案例 2:调用 REST API

import requests

# 调用 GitHub API 获取用户信息
response = requests.get('https://api.github.com/users/moonshot-ai')

# 解析 JSON 数据
user_data = response.json()
print(user_data['name'])
print(user_data['followers'])

案例 3:下载文件

import requests

url = 'https://example.com/file.zip'
response = requests.get(url, stream=True)

with open('file.zip', 'wb') as f:
    for chunk in response.iter_content(chunk_size=8192):
        if chunk:
            f.write(chunk)
  1. 注意事项
  • 遵守法律法规:在使用 requests 进行网络爬虫或数据抓取时,要遵守相关法律法规和网站的使用条款。
  • 合理设置请求频率:避免对服务器造成过大压力,可能导致被封禁 IP。
  • 处理异常和错误:网络请求可能会遇到各种问题,合理处理异常可以提高程序的健壮性。

发表回复

后才能评论