直接模拟Googlebot无法绕过现代反爬机制,因仅伪造UA会被TLS指纹、JS执行、Sec-Fetch头等多维检测识别为伪造流量;需用Playwright启动Chromium并注入真实UA、启用JS、补全Sec-Fetch头等完整浏览器行为。

直接模拟 Googlebot 无法绕过现代网站的反爬机制,反而会因 UA 伪造、行为失真触发更严格封禁——这不是技术问题,而是策略误判。
为什么 requests + Googlebot UA 字符串根本没用
多数网站(尤其 Cloudflare、Akamai、Imperva 部署的站点)不只校验 User-Agent 请求头。它们会检测 TLS 指纹、HTTP/2 流控特征、JS 执行环境、鼠标轨迹、请求节奏等。仅改 headers['User-Agent'] 会被秒识别为伪造流量。
常见错误现象:
- 返回 403 或验证码页面,而非真实 HTML
- 同一 IP 在几秒内被限速或封禁
-
requests.get()成功但响应体含data-hcaptcha-response或data-rocket-captcha
真正需要关注的三个底层差异点
Googlebot 的行为本质是「有状态、可渲染、带上下文的浏览器会话」,不是单次 HTTP 请求。关键差异在:
-
Accept头必须包含text/html,application/xhtml+xml,且顺序不能颠倒;部分站点校验该字段完整性 - 必须携带
Sec-Fetch-*系列头(如Sec-Fetch-Dest: document),requests默认不发,需手动补全 - 真实 Googlebot 使用 Chrome 内核渲染,会执行 JS 加载动态内容;纯
requests拿不到document.querySelectorAll('.result')类结构
可行替代方案:用无头浏览器+真实指纹
如果目标站点未启用高级 Bot Management(如 PerimeterX),可用 playwright 启动 Chromium 并注入 Googlebot 特征:
通过 SerpApi 查询 Google Flights,获取航班时刻表、价格及舱位等级信息。当用户询问航班 / 机票 / 航班价格、时刻表或对比信息时使用。
from playwright.sync_api import sync_playwright
<p>with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
context = browser.new_context(
user_agent="Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.210 Mobile Safari/537.36 (compatible; Googlebot/2.1; +<a href="https://www.php.cn/link/eea564a66f809bfecfdddb23eba6c846">https://www.php.cn/link/eea564a66f809bfecfdddb23eba6c846</a>)",</p><h1>必须开启 JS 执行和 cookies</h1><pre class="brush:php;toolbar:false;"> java_script_enabled=True,
ignore_https_errors=True,
)
page = context.new_page()
page.goto("https://example.com", timeout=30000)
print(page.content()) # 拿到渲染后 HTML
注意:
- 不要用
selenium—— 其 WebDriver 协议指纹极易被识别(cdc_变量、webdriver属性) - Playwright 的
chromium模式比firefox更接近 Googlebot 底层行为 - 仍需配合代理池和请求间隔(
page.wait_for_timeout(2000)),否则 IP 会进黑名单
真正难的不是伪装 UA,而是让整个请求链路(TCP 握手、TLS Client Hello、HTTP/2 stream ID 分配、JS 执行时序)看起来像一台正在索引网页的 Google 服务器。这超出单机 Python 脚本能力范围,也游走在合规边缘。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










