贝利信息

如何绕过 Zoopla 网站的 Cloudflare 防护进行合法数据采集

日期:2026-01-19 00:00 / 作者:聖光之護

zoopla 使用 cloudflare 严格反爬,直接用 requests 发起请求会返回 403 错误;需结合 selenium 模拟真实浏览器行为,并隐藏自动化特征,才能成功获取页面内容。

Zoopla(zoopla.co.uk)作为英国主流房产平台,对爬虫防护极为严格——其背后部署了 Cloudflare 的 WAF(Web Application Firewall),不仅校验 User-Agent 和请求头,还会检测浏览器指纹、navigator.webdriver 属性、自动化扩展痕迹等。因此,仅靠 requests + 自定义 Headers(如常规 UA)几乎必然触发 403 Forbidden 响应,正如示例代码中所遇问题。

✅ 正确做法是使用 Selenium 配合无头 Chrome 的深度伪装策略,关键在于消除自动化“蛛丝马迹”。以下为经过验证的完整解决方案:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time

# 配置 Chrome 选项(推荐使用最新 chromedriver)
options = Options()
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)
options.add_argument("--headless")  # 可选:无界面运行

# 启动驱动(请确保 chromedriver 在 PATH 中,或指定 service=Service("path/to/chromedriver"))
driver = webdriver.Chrome(options=options)

# 关键一步:覆盖 navigator.webdriver 属性(在页面加载前执行)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
    'source': '''
        Object.defineProperty(navigator, 'webdriver', {
            get: () => undefined
        });
    '''
})

try:
    url = "https://www.zoopla.co.uk/to-rent/property/west-midlands/handsworth/sandwell-road/b21-8nl/?q=B21%208NL&radius=1"
    driver.get(url)

    # 等待页面加载完成(建议用 W

ebDriverWait 替代固定 sleep,此处简化示例) time.sleep(3) if "403" in driver.title or "Cloudflare" in driver.page_source: print("⚠️ 仍被拦截:可能需更换 IP、添加更多指纹伪装或启用真实浏览器窗口调试") else: print("✅ 页面加载成功,状态码:", driver.execute_script("return document.readyState")) # 示例:提取标题 title = driver.title print("页面标题:", title) finally: driver.quit()

? 重要注意事项

总之,技术上可行 ≠ 法律与伦理上合理。尊重网站规则、控制请求节奏、优先选用官方渠道,才是可持续数据采集的核心原则。