
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)
# 等待页面加载完成(建议用 WebDriverWait 替代固定 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()? 重要注意事项:
- 遵守 robots.txt 与服务条款:Zoopla 明确禁止未经许可的自动化抓取(参见 https://www.zoopla.co.uk/robots.txt),本方案仅限学习、个人研究或已获授权场景使用;商用前务必联系官方获取 API 接入许可。
- IP 与频率限制:即使绕过前端检测,高频请求仍可能触发 IP 封禁。务必加入 time.sleep(2–5) 间隔,避免连续请求;生产环境建议搭配代理池与随机 UA 轮换。
- 维护成本高:Cloudflare 规则持续升级,此类方案需定期更新(如 CDP 注入逻辑、等待策略、元素定位方式)。长期项目强烈推荐使用 Zoopla 官方 API(如有)或合规第三方数据服务。
- 替代方案提醒:若仅需基础房产信息,可考虑 UK 政府开放数据(如 Land Registry Price Paid Data)或合法聚合平台(e.g., Rightmove API via partner program)。
总之,技术上可行 ≠ 法律与伦理上合理。尊重网站规则、控制请求节奏、优先选用官方渠道,才是可持续数据采集的核心原则。










