别再从零手写爬虫:Apify 平台实战,代理与反爬全托管
原文:https://dev.to/syedahmedx3/stop-building-scrapers-from-scratch-a-developers-guide-to-apify-m4h(作者 @syedahmedx3)
如果你写过 requests + BeautifulSoup 爬虫,也亲眼看着它上线两周后死掉——IP 被封、选择器失效、莫名冒出验证码——那这篇文章就是写给你的。
2026 年,自己动手写爬虫的问题
如今的抓取目标早已不是爬虫教程假设的那种静态 HTML 页面。Cloudflare、Datadome 这类企业级 WAF 现在会校验 TLS 指纹,还会注入 JS 水合(hydration)检测,专门用来识别无头浏览器。这意味着从零手写的爬虫不只是脆弱,而是从第一天起就在对抗一套明摆着要弄垮它的基础设施。
到这个阶段,你做的已经不是“写爬虫”,而是在维护:
* 一个轮换的住宅代理池
* 无头浏览器指纹伪装
* 验证码(CAPTCHA)识别
* 重试与退避逻辑
* 存储与调度
这是整整一个基础设施团队的活,不是你真正产品上的一个顺手支线任务。
Apify 的不同之处
Apify 把抓取逻辑封装成 Actor——无服务器、容器化的任务单元:接收 JSON 输入,返回结构化输出(数据集、文件或队列)。周边的基础设施由平台全权负责:代理、浏览器运行时、调度、监控和存储。
它有两种用法:
1. 直接用 Store 里的现成 Actor(超过 30000 个)
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("apify/web-scraper").call(
run_input={
"startUrls": [{"url": "https://example.com"}],
"pageFunction": """
async function pageFunction(context) {
const { request, page } = context;
const title = await page.title();
return { url: request.url, title };
}
"""
}
)
dataset = client.dataset(run["defaultDatasetId"])
for item in dataset.iterate_items():
print(item)
这就是一次完整的抓取运行:代理、浏览器、重试、存储全都到位,基础设施代码一行没写。
2. 用 Crawlee 自己构建
如果 Store 里没有合适的,可以用 Crawlee(Apify 为 Node.js 和 Python 开源的抓取库)。它提供的正是 Apify 官方 Actor 所依赖的那套基础原语——请求队列、自动扩缩容、浏览器池。用 apify push 一条命令就能部署到 Apify 云端,也可以接进 CI 流程。
对 AI/智能体工作流最关键的部分
如果你在做 LangChain、RAG 或者自主智能体相关的项目,真正的瓶颈通常不在模型,而在于能否稳定地拿到新鲜、结构化的网络数据喂给它。Apify 官方提供了 MCP 服务器,你可以在 Claude、Cursor 或任何兼容 MCP 的客户端里直接用自然语言调用 Actor,不用手写编排代码。对于需要按需获取实时网络数据、而不是依赖一份静态过期数据集的智能体流水线来说,这一点是实打实有用的,不只是宣传话术。
费用情况(实话实说)
定价按用量计算,不是固定包月:
- 计算单元(Compute Units,CU):1 GB 内存跑 1 小时为 1 CU。轻量级 Actor 每次运行的成本只要零点几美分。
- 住宅代理带宽:单独计费(约 8 美元/GB),在重度 JS 渲染的任务里,这通常才是真正的成本大头。
- 部分 Store Actor 会在计算费之外加收按结果计费或按月租用的费用,用之前务必先看该 Actor 的定价标签页。
- 免费档每月送 5 美元额度,不用绑卡,额度不可结转——做原型够用,跑生产负载不够。
什么时候不该用 Apify
如果你确实只需要一次简单的 API 调用去抓一个渲染好的页面,这种窄场景用更轻量的 fetch 类 API 可能更便宜。Apify 的价值体现在你需要可重复、有监控、有人维护的抓取时:定时运行、结构化输出、运行失败自动告警——而不是一次性的临时请求。
原文:https://dev.to/syedahmedx3/stop-building-scrapers-from-scratch-a-developers-guide-to-apify-m4h(作者 @syedahmedx3)