Python Requests 库概述
Python 的 requests 库是目前最流行的 HTTP 客户端库之一,它基于 urllib3 构建,提供了简洁、人性化的 API。相比标准库 , 极大地简化了 HTTP 请求的发送与响应处理过程,是编写网络爬虫、调用 RESTful API 的首选工具。
Python Requests 库是处理 HTTP 请求的核心工具,支持 GET、POST 等多种方法,具备会话管理、代理配置及 SSL 验证能力。对于 JavaScript 渲染页面需结合 Selenium,大规模任务可选 Scrapy。本文详解 Requests 基础用法、高级特性及与其他爬虫框架的对比,涵盖错误处理、性能优化及最佳实践,为构建稳定高效的网络数据采集方案提供参考。

Python 的 requests 库是目前最流行的 HTTP 客户端库之一,它基于 urllib3 构建,提供了简洁、人性化的 API。相比标准库 , 极大地简化了 HTTP 请求的发送与响应处理过程,是编写网络爬虫、调用 RESTful API 的首选工具。
urllibrequestsGET 请求是最常见的请求方式,用于从服务器获取资源。requests 通过 get() 方法实现。
import requests
url = 'https://api.github.com/events'
response = requests.get(url)
# 检查状态码
if response.status_code == 200:
print('请求成功')
else:
print(f'请求失败,状态码:{response.status_code}')
POST 请求通常用于提交数据。可以通过 data 参数提交表单数据,或通过 json 参数提交 JSON 格式数据。
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('http://httpbin.org/post', data=payload)
print(r.text)
# 提交 JSON 数据
headers = {'Content-Type': 'application/json'}
data = {'username': 'test', 'password': 'secret'}
r = requests.post('http://httpbin.org/post', json=data, headers=headers)
print(r.json())
许多网站会检测 User-Agent 或其他头部信息以识别爬虫。设置合理的 Headers 可以模拟浏览器行为。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Referer': 'https://www.google.com/'
}
response = requests.get('https://example.com', headers=headers)
Session 对象允许跨请求持久化某些参数,例如 Cookies。这对于需要登录或维持状态的爬虫任务至关重要。
s = requests.Session()
s.headers.update({'User-Agent': 'MyBot/1.0'})
# 第一次请求,服务器设置 Cookie
r = s.get('https://example.com/login')
# 第二次请求,自动携带 Cookie
r = s.get('https://example.com/dashboard')
print(r.text)
为了隐藏真实 IP 或绕过地域限制,可以使用代理服务器。requests 支持 HTTP 和 SOCKS 代理。
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080'
}
try:
response = requests.get('https://www.google.com', proxies=proxies, timeout=10)
except requests.exceptions.ProxyError as e:
print(f'代理错误:{e}')
网络请求可能因各种原因失败(超时、连接拒绝、DNS 解析失败)。必须使用 try-except 块捕获异常,保证程序健壮性。
import requests
from requests.exceptions import Timeout, ConnectionError, HTTPError
try:
response = requests.get('https://example.com', timeout=5)
response.raise_for_status() # 如果状态码不是 200-299,抛出异常
except Timeout:
print('请求超时')
except ConnectionError:
print('网络连接错误')
except HTTPError as e:
print(f'HTTP 错误:{e}')
下载大文件时,建议使用流式传输 (stream=True) 以避免一次性加载到内存。
with requests.get('https://example.com/largefile.zip', stream=True) as r:
r.raise_for_status()
with open('downloaded_file.zip', 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
使用 files 参数上传本地文件。
url = 'https://httpbin.org/post'
files = {'file': open('report.pdf', 'rb')}
r = requests.post(url, files=files)
print(r.json())
虽然 requests 功能强大,但在特定场景下需结合其他工具。
| 工具 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Requests | 静态页面、API 调用 | 轻量、快速、易用 | 无法执行 JavaScript |
| Selenium | JS 渲染页面、复杂交互 | 模拟真实浏览器、可操作 DOM | 速度慢、资源消耗大 |
| Scrapy | 大规模分布式爬取 | 异步架构、管道系统完善 | 学习曲线陡峭、配置复杂 |
| BeautifulSoup | 简单 HTML 解析 | 容错率高、语法简单 | 仅解析,无请求能力 |
| Aiohttp | 高并发异步请求 | 性能极高、原生异步 | 编程模型较复杂 |
当目标网站 heavily 依赖 JavaScript 动态加载内容(如无限滚动、SPA 应用)时,requests 只能获取空壳 HTML。此时需使用 Selenium 驱动浏览器执行脚本。
from selenium import webdriver
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 无头模式
browser = webdriver.Chrome(options=options)
browser.get('https://example.com')
element = browser.find_element(By.ID, 'dynamic-content')
print(element.text)
browser.quit()
对于需要抓取成千上万页面的项目,Scrapy 提供了中间件、去重、调度器等完整框架,适合企业级爬虫开发。
robots.txt 文件,尊重网站规则。time.sleep() 控制频率。requests.adapters.HTTPAdapter 实现自动重试策略。Python requests 库以其简洁性和强大的功能成为网络请求的事实标准。掌握其基础用法、会话管理、代理配置及异常处理,足以应对绝大多数静态网页和数据接口的采集需求。对于动态渲染或超大规模任务,则应结合 Selenium 或 Scrapy 构建混合方案。在实际开发中,务必注重代码规范、性能优化及合规性,确保数据采集任务的稳定运行。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online