从requests到浏览器自动化:企业级采集方案为什么必须使用混合架构

15 阅读4分钟

先给结论:

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 负责效率,
浏览器自动化负责信任。

真正成熟的采集系统,一定是混合架构