房地产数据采集是指从门户网站和数据库中提取有关房产的结构化信息:价格、状态、面积、位置、经纪人以及这些信息各自的变更日期。技术难点在于,持有这些数据的门户网站将其视为核心资产,并相应地进行防护。
这使得代理的选择变得至关重要。本指南将介绍需要采集哪些内容、如何从主要门户网站采集数据而不被封锁,以及哪些请求速率和刷新周期实际有效。
你需要什么配置
对于公开的房源列表页面,需要使用轮换住宅代理。主要门户网站运行商业化的反机器人系统,会在查看其他任何内容之前先对数据中心地址段进行分类,因此无论速率如何,数据中心代理都会在第一次请求时就失败。
对于任何需要登录才能访问的内容,包括大多数 MLS 访问,需要使用 ISP 代理,因为会话必须保持有效,而地址的变化会使会话失效。
其余的一切都是关于请求速率的自律,这在此处比代理的选择更为重要。
需要采集哪些内容
| 字段 | 重要性 | 刷新频率 |
|---|---|---|
| 房源 ID 和 URL | 其他所有信息据以关联的键值 | 一次性 |
| 价格及价格历史 | 几乎所有分析中的主要信号 | 每日 |
| 状态(在售、待定、已售、已撤回) | 市场活跃度的来源 | 每日 |
| 挂牌日期和更新日期 | 挂牌天数,核心健康指标 | 每日 |
| 地址、坐标、邮编 | 地理聚合 | 一次性 |
| 卧室数、浴室数、建筑面积、地块面积 | 将价格标准化为可比数据 | 一次性 |
| 房产类型和建造年份 | 细分 | 一次性 |
| 经纪人和经纪公司 | 市场份额分析,同时也是个人数据,需谨慎处理 | 一次性 |
| 描述和特征 | 文本分析、设施提取 | 每周 |
| 照片数量和 URL | 房源质量信号 | 每周 |
区分哪些字段会变化、哪些不会变化,是控制数据量的关键。价格和状态需要每日检查。建筑面积不会变化,每天重新采集只会白白增加带宽消耗。
监控 MLS 数据库
MLS 数据是最丰富的数据来源,同时也是限制最严格的。它不是一个公开网站:访问权限根据协议授予持牌参与者,官方认可的获取方式是数据源而非爬虫。
- RESO Web API 是现代标准,一个返回 JSON 的结构化 API,支持增量同步,因此你只需请求自上次轮询以来发生变化的记录。如果你有权访问 MLS,这是正确的集成方式。
- RETS 是较旧的数据源标准,部分地区仍在使用,正逐步被上述标准取代。
- 增量轮询,而非全量轮询。 请求自上次时间戳以来的变化。对大型 MLS 进行全量刷新既庞大又没有必要。
- 遵守许可协议。 MLS 协议规定了展示、保留和再分发的规则。违反这些规则可能危及访问权限本身,这比失去任何数据集的损失都要大。
代理在这里的重要性不如公开门户网站,因为你是经过身份验证的参与者。代理真正有帮助的地方在于稳定性:ISP 代理为集成提供一个固定地址,当访问权限与注册地址绑定时,这一点很重要。
从主要门户网站采集数据
公开门户网站是代理真正发挥作用的地方。每个网站的表现各不相同。
Zillow
反机器人防护严密,速率限制严格。搜索结果页面是高效的入口点,因为它们携带了大部分摘要字段,无需访问每个房源页面。
- 代理: 轮换住宅代理,美国地理定位。
- 速率: 保守为宜。每个地址每 3 到 5 秒发送一次请求。
- 注意事项: 基于地图的搜索通过内部端点而非 HTML 返回数据,这种方式效率更高,但也受到更严密的监控。
Redfin
比 Zillow 更宽容一些,结构也更清晰。数据通常以嵌入式 JSON 形式提供,而无需解析 HTML。
- 代理: 轮换住宅代理,美国。
- 速率: 每个地址每 2 到 3 秒发送一次请求。
- 注意事项: 覆盖范围因市场而异,因此某个房源不存在并不代表它确实不存在。
Realtor.com
直接同步 MLS 数据,因此数据具有时效性,防护力度中等。
- 代理: 轮换住宅代理,美国。
- 速率: 每个地址每 2 到 4 秒发送一次请求。
Rightmove 和 Zoopla
英国两大主导门户网站。两者都有防护措施,其中 Rightmove 更为严格。
- 代理: 轮换住宅代理,英国地理定位。非英国地址会看到不同的结果,或者看不到结果。
- 速率: 每个地址每 3 到 5 秒发送一次请求。
- 注意事项: 两个网站都会通过不同的经纪人列出相同的房产,因此应根据地址而非房源 ID 进行去重。
请求速率、轮换与并发
速率是决定采集能否持续进行的最重要因素。大多数被封锁的人不是因为被识别为代理,而是因为被识别为操之过急。
- 单地址速率: 在门户网站上每 2 到 5 秒发送一次请求。这比感觉上需要的速度要慢,这也是为什么需要并发。
- 并发,而非速度: 要加快采集速度,应增加地址数量而非缩短间隔时间。10 个地址每 3 秒发送一次请求,总计每秒约 3 个请求,大约一小时可处理 10,000 条房源。
- 轮换: 浏览独立房源页面时按请求轮换。分页浏览带有游标的搜索结果时使用粘性会话,仅保持足够长的时间以完成分页。
- 添加抖动。 每隔恰好 3.0 秒发送一次请求是一种明显特征。应在 2 到 5 秒之间变化。
- 在目标市场时区的非高峰时段采集。 较低的基线流量意味着你的请求占总流量的比例更小,速率限制通常也更宽松。
当封锁开始出现时
- 阅读响应内容。 429 表示速率限制,意味着需要放慢速度。质询页面则表示问题出在你的指纹特征上,而非速率。
- 首先将速率减半。 这是最便宜的解决方法,通常也是正确的方法。
- 检查请求头和指纹特征。 在一个原本空白的请求中出现裸露的
User-Agent,是明显的机器人信号。 - 不要在被封锁时重试。 使用指数退避。对软性速率限制进行猛烈请求会使其变成对该地址的硬性封禁。
- 重新考虑目标网站。 如果某个门户网站的重试成本高于数据本身的价值,Web Scraping API 可以为你处理渲染和质询,单价更高,但维护成本低得多。
刷新周期
- 每日: 新增房源、状态变化、价格变化。几乎所有分析价值都集中在这里。
- 每周: 描述、照片、经纪人详情。这些内容在房源上线后很少变化。
- 一次性: 地址、坐标、面积、房产类型。结构性事实。
以这种方式拆分刷新计划,通常能比每天重新采集所有内容节省一半以上的带宽,且不会损失信号。
结论
房地产数据采集主要是一个自律问题,而非技术问题。使用住宅代理,因为门户网站一眼就能识别数据中心地址;保持单地址请求速率缓慢,转而通过增加并发来提速;并根据每个字段实际变化的频率来拆分刷新计划。
关于爬虫机制的一般性内容,请参阅 web scraping proxies;关于商业应用,请参阅 price intelligence;关于法律基础,请参阅 proxy and scraping legality。Shifter 的住宅代理可满足这些门户网站所需的地理定位,价格详情见定价页面。