python中的requests库的详细使用教程
requests
是一个非常流行的 Python HTTP 库,用于发送各种 HTTP 请求,如 GET、POST、PUT、DELETE 等。它简单易用,功能强大,广泛应用于网络爬虫、API 调用等场景。以下是对 requests
库的详细使用方法和一些实用案例的分享。
- 安装
requests
库
在使用requests
库之前,需要先安装它。可以通过以下命令安装:
pip install requests
- 基本使用方法
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-Agent
或 Authorization
)。
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())
- 高级使用方法
.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:爬取网页内容
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)
- 注意事项
- 遵守法律法规:在使用
requests
进行网络爬虫或数据抓取时,要遵守相关法律法规和网站的使用条款。 - 合理设置请求频率:避免对服务器造成过大压力,可能导致被封禁 IP。
- 处理异常和错误:网络请求可能会遇到各种问题,合理处理异常可以提高程序的健壮性。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。