
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,并通过以下关键配置规避自动化特征:
✅ 核心反检测配置(Python + Selenium)
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) # 验证是否成功加载⚠️ 重要注意事项
- 遵守 robots.txt 与服务条款:Zoopla 明确禁止未经许可的自动化抓取(见 zoopla.co.uk/robots.txt)。本方案仅适用于学习、个人非商业用途或已获授权的数据采集。
- 频率控制是关键:即使伪装成功,高频请求仍会触发 IP 封禁。务必在请求间加入 time.sleep(2–5),或使用 WebDriverWait 等待元素加载,避免轮询。
- User-Agent 动态化更佳:可配合 fake-useragent 库随机切换 UA,进一步降低被识别风险。
- Cloudflare 挑战升级时需应对:若出现“Checking your browser…” 页面,说明触发了更高级验证(如 JavaScript 挑战),此时需引入 undetected-chromedriver v2/v3 或专用库(如 cloudscraper —— 但 Zoopla 不支持该库直连)。
? 总结
403 错误本质是反爬策略生效,而非网络或语法问题。requests 无法绕过现代前端防护,而 Selenium 配合深度浏览器指纹混淆是当前最可行的方案。但请始终以尊重网站规则为前提——优先考虑官方 API(Zoopla 提供有限的合作伙伴接口)、缓存数据复用或公开数据集替代抓取。技术能力应服务于合规目标,而非突破边界。










