zoopla使用cloudflare反爬机制导致http 403错误,直接用requests无法访问;本文详解通过selenium模拟真实浏览器行为、隐藏自动化特征并合理控制请求节奏的合规应对方案。
Zoopla.co.uk 是英国主流房产平台,其前端部署了 Cloudflare 的 WAF(Web Application Firewall)和机器人检测系统(如 navigator.webdriver 检测、TLS指纹识别、行为分析等),因此仅靠 requests + 自定义 User-Agent 的方式极易触发 403 Forbidden 响应——这不是简单的 headers 缺失问题,而是服务端主动识别并拦截了自动化流量。
要实现稳定访问,推荐采用 无头 Chrome 配合 Selenium WebDriver,并通过以下关键配置规避自动化特征:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time options = Options() options.add_argument("--headless") # 可选:无界面运行 options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options) # 关键:覆盖 navigator.webdriver 属性(Cloudflare 常用检测点) driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': ''' Object.defineProperty(navigator, 'webdriver', { get: () => undefined }); ''' }) # 访问目标URL(建议添加显式等待替代 time.sleep) url = "https://www.zoopla.co.uk/to-rent/property/west-midlands/handsworth/sandwell-road/b21-8nl/?q=B21%208NL&radius=1" driver.get(url) time.sleep(3) # 简单等待页面加载(生产环境建议用 WebDriverWait) print("Status:", driver.title) # 验证是否成功加载
403 错误本质是反爬策略生效,而非网络或语法问题。requests 无法绕过现代前端防护,而 Selenium 配合深度浏览器指纹混淆是当前最可行的方案。但请始终以尊重网站规则为前提——优先考虑官方 API(Zoopla 提供有限的合作伙伴接口)、缓存数据复用或公开数据集替代抓取。技术能力应服务于合规目标,而非突破边界。