You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Scrapy抓取受Cloudflare保护的craft.co/tesla站点

Scrapy爬取触发Cloudflare验证的解决方法

Cloudflare会通过请求头特征、TLS指纹、JavaScript运行环境等维度识别爬虫,默认Scrapy请求不符合浏览器特征就会触发验证,可按以下方案逐步排查解决:

方案1:修改基础请求参数匹配浏览器

  • 替换默认Scrapy的User-Agent为你本地浏览器的真实UA,可在浏览器控制台「网络」标签任意请求的请求头中获取,在settings.py中配置:
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
  • 开启Cookie自动管理,在settings.py设置COOKIES_ENABLED = True
  • 补充和浏览器一致的常规请求头,包括Accept、Accept-Language、Accept-Encoding等,避免特征差异过大

方案2:替换下载器解决TLS指纹识别问题

默认Scrapy使用的网络库TLS JA3指纹和真实浏览器差异极大,很容易被Cloudflare识别,推荐使用scrapy-playwright插件调用真实Chrome发起请求:

  • 安装依赖:
pip install scrapy-playwright
playwright install chromium
  • 在settings.py中添加下载器配置:
DOWNLOAD_HANDLERS = {
    "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
    "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
}
PLAYWRIGHT_LAUNCH_OPTIONS = {
    "headless": False, # 调试阶段使用有头模式,稳定后可改为True使用无头模式
    "channel": "chrome",
}
  • 发起请求时添加playwright标记即可:
yield scrapy.Request(
    url="https://craft.co/tesla",
    meta={"playwright": True}
)

该方案完全模拟真实Chrome的请求特征、支持JavaScript执行,可绕过绝大多数Cloudflare基础验证。

方案3:处理主动人机验证

如果触发了点击、滑块类的主动验证,可通过复用本地浏览器会话的方式跳过重复验证:

  1. 先手动在本地Chrome打开目标站点,完成一次Cloudflare验证
  2. 在playwright启动配置中添加本地浏览器用户数据目录参数:
PLAYWRIGHT_LAUNCH_OPTIONS = {
    "headless": False,
    "channel": "chrome",
    "args": [
        "--user-data-dir=你的本地Chrome用户数据目录路径", # Windows路径一般为C:\Users\用户名\AppData\Local\Google\Chrome\User Data,Mac为/Users/用户名/Library/Application Support/Google/Chrome
    ]
}

配置完成后Scrapy调用Chrome时会复用已经通过验证的Cookie和会话,无需重复验证。

内容的提问来源于stack exchange,提问作者nfon jeannoel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:54:03