You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python BS4开发的Zillow爬虫每页仅返回前9条结果,是什么原因?

Zillow房源爬虫单页仅返回9条数据的问题排查与修复

核心原因

  • 前端动态渲染限制:Zillow的房源列表默认仅在初始HTML中静态渲染前9条房源,剩余31条需要用户滚动页面时通过AJAX异步加载,你直接用requests请求初始页面只能拿到静态渲染的9条数据,异步加载的内容不会出现在初始返回的HTML中。
  • 定位规则兼容性差:你写死了完整的photo-cards photo-cards_wow photo-cards_short photo-cards_extra-attribution类名作为列表容器的定位条件,Zillow会频繁更新前端样式类名,只要任意一个类名发生变更,你就可能拿到不完整的列表节点,甚至定位失败。
  • 参数编码错误:你在searchQueryState参数中使用了HTML实体"代替双引号,requests传参时会自动对参数做URL编码,导致"被二次转义,Zillow后端无法正常识别你的查询参数,也可能导致返回的房源数量不足。

修复方案

方案1(推荐):直接抓取后端接口

Zillow的房源数据本质是通过后端接口返回的,无需解析HTML,直接抓接口即可拿到全量结构化数据:

  1. 打开浏览器F12开发者工具,切换到「网络」面板,筛选Fetch/XHR请求,找到路径包含GetSearchPageState.htm的请求
  2. 模拟该请求的 headers 和参数直接发送请求,返回的JSON数据中包含单页全部40条房源信息,解析效率和准确率远高于HTML解析

方案2:适配动态渲染场景

如果坚持爬取HTML页面,改用无头浏览器工具模拟用户操作:

  • 使用Selenium或Playwright加载页面,模拟向下滚动操作,等待所有房源卡片渲染完成后再提取内容
  • 优化列表容器定位规则,改为模糊匹配类名:content.find('ul', class_=lambda c: c and 'photo-cards' in c),避免因为类名更新导致定位失败

其他代码优化点

  • 修正参数编码:将searchQueryState中的"全部替换为双引号,直接构造Python字典再序列化为JSON字符串作为参数值,避免转义错误
  • 调整CSV写入逻辑:将to_csv()调用移到分页循环外部,爬完所有页面后再一次性写入文件,减少不必要的IO操作

内容的提问来源于stack exchange,提问作者FormidableData

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 17:09:00