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

Selenium用css selector查找元素未返回全部列表项,Zillow房源爬取不全如何解决

问题原因

Zillow搜索结果页采用懒加载机制,仅当房源滚动到可视区域时才会渲染对应DOM元素,首次打开页面只会加载首屏约9-10条房源,剩余房源需要滚动页面触发加载,同时超过一定数量的房源会拆分到多页展示,所以直接获取元素只能拿到首屏数据。

解决方法
  • 先处理当前页懒加载
    模拟用户滚动页面到最底部,等待新房源渲染完成后重复操作,直到连续两次滚动后房源数量不再变化,说明当前页所有房源已加载完成,参考代码如下:
    import time
    import random
    
    # 搜索跳转至结果页后执行以下逻辑
    last_count = 0
    while True:
        # 滚动到页面底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
        # 随机等待2-4秒,避免触发反爬,同时留足加载时间
        time.sleep(random.uniform(2, 4))
        current_list = driver.find_elements_by_css_selector("#grid-search-results li .list-card-info a")
        current_count = len(current_list)
        # 数量无变化代表当前页加载完成
        if current_count == last_count:
            break
        last_count = current_count
    
    # 此时current_list就是当前页全部房源链接
    print(len(current_list))
    for link in current_list:
        print(link.get_attribute('href'))
    
  • 处理多页数据
    当前页数据采集完成后,定位页面底部的下一页按钮,判断按钮是否可点击,可点击的话模拟点击跳转下一页,重复上述滚动采集逻辑,直到下一页按钮置灰不可点击为止,就能拿到所有分页的全量房源。
  • 更高效的替代方案
    可以直接抓取Zillow的后端搜索接口:打开浏览器F12开发者工具切换到网络面板,筛选XHR请求,执行搜索后找到返回房源JSON数据的接口,直接构造请求参数调用接口拿数据,不需要处理前端懒加载、分页逻辑,采集效率更高。
注意事项

Zillow有严格的反爬机制,操作频率不要过高,可配合undetected-chromedriver替换原生Selenium驱动,降低被识别为爬虫的概率,避免弹出人机验证导致采集中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:18:02