0

0

Zillow 价格历史数据爬取失败的常见原因与解决方案

霞舞

霞舞

发布时间:2026-02-02 16:50:03

|

222人浏览过

|

来源于php中文网

原创

Zillow 价格历史数据爬取失败的常见原因与解决方案

zillow 页面内容大量依赖 javascript 动态渲染,使用 requests + beautifulsoup 无法获取真实 dom 结构,导致元素查找返回 none;需改用浏览器自动化工具(如 selenium)并配合显式等待,才能稳定提取价格历史等动态加载数据。

Zillow 是典型的反爬强度较高的房产平台:其价格历史、估价趋势、房源详情等关键数据均通过 React 或 Next.js 动态注入,原始 HTML 响应中几乎不包含这些内容。你遇到的 AttributeError: 'NoneType' object has no attribute 'find' 正是典型表现——soup.find(...) 返回 None,说明 price_history_section 根本未被解析到,根本原因在于 response.content 中压根不存在你所 inspect 到的那些带 hdp__sc-... 类名的 div。

✅ 正确做法:使用 Selenium + ChromeDriver 模拟真实浏览器行为,并配合 WebDriverWait 等待目标元素加载完成:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

# 配置无头模式(可选,便于部署)
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=chrome_options)
wait = WebDriverWait(driver, 15)  # 最多等待15秒

try:
    url = input('请输入 Zillow 房源链接:')
    driver.get(url)

    # 显式等待价格历史区域出现(使用更鲁棒的选择器)
    price_history_section = wait.until(
        EC.presence_of_element_located((By.XPATH, "//h2[contains(text(), 'Price history')]/ancestor::section"))
    )

    # 查找表格(Zillow 表格结构可能变化,推荐用 role="table" 或 aria-label 定位)
    table = price_history_section.find_element(By.XPATH, ".//table[.//th[contains(text(), 'Date')]]")

    # 提取所有数据行(排除表头)
    rows = table.find_elements(By.XPATH, ".//tr[position()>1]")

    for row in rows:
        try:
            cells = row.find_elements(By.TAG_NAME, "td")
            if len(cells) >= 2:
                date = cells[0].text.strip()
                price = cells[1].text.strip().replace('$', '').replace(',', '')
                print(f"{date}: ${price}")
        except Exception as e:
            continue  # 跳过异常行,增强鲁棒性

except Exception as e:
    print(f"抓取失败:{e}")
finally:
    driver.quit()

⚠️ 注意事项:

自由画布
自由画布

百度文库和百度网盘联合开发的AI创作工具类智能体

下载
  • 类名不可靠:Zillow 使用 CSS-in-JS,类名(如 hdp__sc-1j01zad-0)是哈希生成的,每次构建都可能变化,切勿硬编码 class 名;优先使用语义化定位(如 contains(text(), 'Price history')、role="table"、aria-label 或层级关系)。
  • 反爬风控:Zillow 会检测自动化行为。建议添加 user-agent、随机延时、禁用图片加载(prefs = {"profile.managed_default_content_settings.images": 2})以降低被封概率。
  • 法律与合规:请务必查阅 Zillow robots.txt 及其 Terms of Use,未经授权的大规模爬取可能违反服务条款。生产环境建议优先使用官方 API(如 Zillow API 或经授权的 MLS 数据源)。
  • 备用方案:若 Selenium 不适用,可尝试 requests-html(支持 JS 渲染),但稳定性远低于 Selenium;或分析 Zillow 的 XHR 请求(如 /api/hdp/data/home-details/ 接口),需逆向 Cookie 和 CSRF Token,技术门槛高且易失效。

总结:静态解析(requests + BeautifulSoup)对 Zillow 无效;动态渲染内容必须借助浏览器自动化工具,并采用语义化、容错性强的选择策略。稳定性和合规性,永远比“能跑通”更重要。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6433

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

349

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

415

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

95

2025.08.19

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6247

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

825

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1072

2023.12.21

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

45

2026.02.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.2万人学习

CSS教程
CSS教程

共754课时 | 26.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号