先给结论:
requests 没有过时,
真正出问题的,是很多团队用它干了超出它能力边界的事。
我在企业级采集项目里,完整经历过一轮从
requests → requests + 逆向 → 浏览器自动化 的架构演进,
这篇回答,不讲教程,只讲一次真实的选型复盘。
一、最开始,requests 用得好好的,为什么要“升级”?
我们一开始的系统非常典型:
- Python + requests
- headers、cookies 配齐
- 接入代理 IP
- 多线程跑任务
当时的状态是:
- 速度快
- 成本低
- 成功率接近 100%
但随着业务扩大,问题开始慢慢出现:
- 采集频率变高
- 页面开始大量 JS 渲染
- 同样的请求,今天能用,明天 403
- 验证码、跳转页越来越多
最明显的信号只有一个:
请求成功率开始不可预期
二、requests 的能力边界,其实非常清晰
很多人对 requests 的误解是:
“只要参数逆向到位,它什么都能爬。”
但在企业环境里,你很快会发现,它只适合一类页面。
requests 非常稳定的场景包括:
- 列表页接口
- JSON API
- 参数规则稳定、不依赖浏览器执行环境的接口
典型的 requests 用法大概就是这样:
import requests
# 亿牛云爬虫代理配置
proxies = {
"http": "http://用户名:密码@域名:端口",
"https": "http://用户名:密码@域名:端口"
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Accept-Language": "zh-CN,zh;q=0.9"
}
url = "https://example.com/api/list"
resp = requests.get(
url,
headers=headers,
proxies=proxies,
timeout=10
)
if resp.status_code == 200:
data = resp.json()
print(data)
只要目标站点愿意把数据“直接给你”,
requests 依然是性价比最高的方案。
三、真正的问题不是接口,而是“你像不像一个浏览器”
后来我们发现,很多页面并不是接口变复杂了,而是:
- 需要完整 DOM
- 需要浏览器上下文
- 需要真实页面跳转链路
- 需要浏览器指纹一致性
换句话说:
对方不再信任“纯 HTTP 请求”了
这时候继续在 requests 上死磕,只会出现一个结果:
- 规则越来越多
- 成功率越来越抖
- 维护成本越来越高
四、浏览器自动化不是升级,是“兜底能力”
我们最终引入浏览器自动化,并不是因为它“更高级”,
而是因为它解决了 requests 解决不了的问题。
浏览器自动化的核心价值只有一句话:
它让你的请求重新变得“可信”
以 Playwright 为例,最基础的代理接入方式如下:
from playwright.sync_api import sync_playwright
# 亿牛云代理浏览器配置
proxy = {
"server": "http://域名:端口",
"username": "用户名",
"password": "密码"
}
with sync_playwright() as p:
browser = p.chromium.launch(
headless=True,
proxy=proxy # 浏览器级代理
)
context = browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
)
page = context.new_page()
page.goto("https://example.com/detail", timeout=30000)
html = page.content()
print(html)
browser.close()
这一套下来,你拿到的是:
- JS 完整执行后的页面
- 合法的浏览器指纹
- 真实的访问路径
代价也非常明显:
- 单实例资源消耗高
- 并发能力有限
- 运维复杂度上升
五、企业级真正成熟的做法:不是替换,而是分层
踩完坑之后,我们才意识到一个关键点:
浏览器自动化,不该替换 requests
最终的架构思路是“能力分层”:
- 能用 requests 的地方,绝不用浏览器
- 浏览器只负责高价值、强风控页面
- 请求成功率优先于技术洁癖
用一句话总结就是:
80% 的页面,永远不值得上浏览器
requests 负责规模与效率,
浏览器自动化负责成功率兜底。
六、代理 IP 在企业里,是基础设施
无论是 requests 还是浏览器自动化,
代理 IP 在企业级采集方案中承担的角色都是一样的:
- 降低封禁概率
- 平衡访问压力
- 提供稳定出口能力
但区别在于:
- requests 使用的是 HTTP 层代理
- 浏览器自动化使用的是浏览器级代理
真正重要的不是“有没有代理”,而是:
- 成功率是否被监控
- 失败类型是否被分类
- 代理是否参与调度决策
七、最后的结论,其实很朴素
如果你现在正纠结:
- requests 还能不能用?
- 要不要全面切浏览器?
- 采集成本为什么越来越高?
那我的答案是:
不是技术选错了,
而是没有把不同技术放在它该待的位置上。
requests 负责效率,
浏览器自动化负责信任。
真正成熟的采集系统,一定是混合架构。