Zillow数据抓取最头疼的问题:IP被封
做过房产数据抓取的老司机都懂,Zillow的反爬机制比小区门禁还严。最要命的是IP地址被封禁,刚抓两页数据就提示验证码,再刷新直接给你IP拉黑名单。这时候要是用自己家宽带,基本上这个月就别想再碰Zillow了。
上周有个做海外房产分析的朋友找我吐槽,说他花三天写的爬虫脚本,刚跑半小时就被封了20多个IP。这种情况用ipipgo的住宅代理服务就能破局,他们家的动态IP池子够大,每次请求自动切换出口IP,亲测连续采集6小时都没触发封禁。
定位JSON数据的三个关键步奏
打开Chrome开发者工具(F12),切到Network标签页,这时候在Zillow搜索页面随便点个筛选条件,比如调整价格区间。注意观察XHR类型的请求,重点找包含”api/search”的请求链接。
这里有个小窍门:在过滤框输入/search
能快速定位目标请求。点击对应的请求记录,在Preview选项卡里能看到结构化的JSON数据,里面藏着房源坐标、户型图、历史价格等20多项关键数据。
字段名 | 数据类型 | 示例值 |
---|---|---|
zpid | 数字 | 1234567890 |
price | 字符串 | “$1,235,000” |
bedrooms | 整数 | 3 |
代理IP实战配置技巧
用Python的requests库举例,重点看headers伪装和代理轮换两个环节。这里有个坑:Zillow会校验User-Agent的设备类型,建议用最新版Chrome的UA头,别用那些烂大街的爬虫UA。
import requests from ipipgo import get_proxy 这里用ipipgo的SDK proxy = get_proxy(type='residential') 住宅代理更接近真实用户 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...', 'Accept-Language': 'en-US,en;q=0.9' } response = requests.get( 'https://www.zillow.com/api/search', proxies={"http": proxy, "https": proxy}, headers=headers, timeout=10 )
注意超时设置不要低于8秒,太快的请求频率会被识别为机器人。建议配合随机延时,用time.sleep(random.uniform(1.2, 4.5))
模拟真人操作间隔。
必须避开的五个坑
1. 别用数据中心代理:AWS/GCP的IP段早就被Zillow标记了,住宅代理才是王道
2. Cookie要隔离:每个代理IP配独立的cookie存储
3. 图片加载要禁用:爬数据时别加载图片,省流量还能降风险
4. 验证码识别要慎用:自动打码服务会显著提高被封概率
5. 数据更新频率控制:同一房源每天抓取别超过3次
常见问题QA
Q:为什么用代理IP还是被封?
A:检查是不是用了共享代理,建议换ipipgo的独享住宅代理,每个会话都是干净IP
Q:JSON数据里有些字段缺失怎么办?
A:试试在请求参数里加?include=all
,可能需要登录态,记得挂代理模拟美国本地IP
Q:ipipgo的哪个套餐最适合Zillow?
A:推荐住宅代理-专业版,支持自动IP轮换+地理位置定位,特别是要抓区域房价时,能指定州级别的出口IP
代理服务怎么选才靠谱
用过七八家代理服务商的血泪经验:
1. IP池规模至少500万以上(ipipgo的住宅IP池有1200万+)
2. 要有请求成功率保障,低于95%的可以直接pass
3. API要支持按业务场景定制,比如设置单个IP的最大使用次数
4. 必须提供7×24小时技术支持,上次凌晨三点遇到IP连不上,ipipgo的技术秒回工单
最后提醒新手:别图便宜买那些$0.1/IP的垃圾代理,Zillow的风控系统比你想的聪明。测试阶段可以先用ipipgo的免费试用套餐,每天500个请求足够跑通整个流程。