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