过时的HTML和无头浏览器总让我被屏蔽,于是我转而重放实际请求
摘要
作者分享了从使用无头浏览器切换到重放直接请求来抓取网站的经验,显著降低了被屏蔽率和资源消耗。
花了几个月时间试图为一个需要实时定价和文档的代理抓取网站,而无头浏览器的方案简直让我痛不欲生。尝试了在住宅代理上运行Playwright集群,各种配置齐全。开发环境下运行良好,但一旦上线,我遭遇了IP疯狂被封的情况——大约400个页面,而且其中有个目标网站推送了重新设计,导致我一半的选择器一夜之间失效。感觉就像在照顾一堆随时会同时崩溃的Chrome实例。最终解决问题的方法很简单:打开开发者工具,查看网络标签,发现我关注80%的页面其实都是通过JSON端点进行数据填充的。于是,我不再渲染页面,而是直接重放底层的请求。设置好正确的请求头、Cookie、Accept-Language,然后就能收到干净的JSON响应。没有DOM,没有会失效的选择器,也没有Chrome。其中一个我抓取的网站,原来每个页面在浏览器中需要约6秒,而现在作为一个普通请求只需要约180毫秒,而且被封率几乎降为零,因为我的请求看起来就像是网站自己的前端在调用自己的API。但要注意,这并非万能。我遇到的一些情况包括:- 带有签名请求参数或短期令牌的网站,需要先通过一个轻量级的预热请求获取令牌,然后再重放;- 某些端点会检查Referer和Origin头,浏览器会静默设置这些,所以必须精确模拟;- 像Akamai/Cloudflare这类更强大的反爬系统,不仅检查请求头,还会通过TLS指纹识别,因此需要使用一个不会在握手时暴露“Python requests”特征的客户端;- 当网站确实是无后端API的客户端渲染(虽然少见,但确实存在),那么无论你愿不愿意,都只能回到浏览器方案。对我帮助最大的思维转变是,不再把网站视为“需要渲染的页面”,而是将其看作“一个背后附着网站界面的API”。一旦看清了实际请求,爬虫就不再是军备竞赛,而变成了一件枯燥的事情——而这正是我们想要的。有人已经为自己的代理数据层完全采用请求重放了吗?我很想知道大家在大规模处理令牌刷新和TLS指纹方面是如何做的,因为这仍然是我感到在拼拼凑凑的地方。
相似文章
@Fluyeporlaweb: 网页抓取技术升级——Scrapling 绕过 Cloudflare 封锁,速度是 BeautifulSoup 的 774 倍,而且无需……
Scrapling 是一个网页抓取框架,能够绕过 Cloudflare 封锁,速度比 BeautifulSoup 快 774 倍,并能自动适应网站变化。它在 GitHub 上拥有 5.22 万星标,并支持作为 MCP 服务器与 AI 代理协作。
@simplifyinAI: 这个Python库可以抓取任何网站,同时绕过互联网上所有的机器人防护。它旋转指纹,…
一个Python库,通过旋转指纹、模拟真实浏览器头部并自动处理验证码,在抓取网站时绕过Cloudflare、Akamai等机器人防护。它使用无头Chromium、Playwright、代理轮换,并且完全开源。
@hasantoxr: 发现这个后,我再也不愿每月花 500 美元购买反检测浏览器了。它叫 CloakBrowser。一款隐秘的 Chromium……
本文介绍了 CloakBrowser,这是一款基于 Chromium 的开源隐秘浏览器,旨在绕过 reCAPTCHA 和 Cloudflare Turnstile 等机器人检测系统。它声称通过直接修补 C++ 源代码而非注入 JavaScript 来提供卓越的隐秘能力,定位自己为昂贵商业反检测浏览器的免费替代方案。
@thisguyknowsai:这就是 GitHub 为何无敌……一位开发者构建了一款让 Chrome 显得臃肿的无头浏览器。它叫 Obsc…
一位开发者使用 Rust 构建了名为 Obscura 的开源无头浏览器引擎,专为 AI Agent、网页爬取和自动化设计,声称其比 Chrome 更加轻量。
@NFTCPS: 兄弟们,Headless Chrome 该退休了! 有人用 Rust 搓了个专给 AI Agent 和爬虫用的无头浏览器引擎——Obscura,性能直接把 Chrome 按地上摩擦: ① 内存只吃 30MB(Chrome 吃你几个G) ②…
Obscura is a new Rust-based headless browser engine targeting AI agents and crawlers, offering 30 MB memory usage, 85 ms startup, and CDP compatibility with Puppeteer/Playwright.