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

使用BeautifulSoup的findAll提取span标签文本返回空列表的原因是什么

问题原因及解决方案

导致返回空列表的核心原因

  • Zillow反爬拦截:仅配置User-Agent不足以通过Zillow的反爬校验,你的请求大概率被返回了403状态码、验证码拦截页面,根本没有获取到正常的房源详情页源码。
  • 内容为JS动态渲染:你要提取的Walk Score分数属于页面加载完成后通过JavaScript异步请求渲染的内容,直接用requests请求得到的静态HTML源码里不存在对应span标签,自然匹配不到。
  • 使用了动态生成的类名做筛选条件:你用到的Text-c11n-8-48-0__sc-aiai24-0 hdp__sc-1af0wis-4 ifWvNt是前端工程化自动生成的hash类名,会随站点版本更新、访问环境变化而变动,稳定性极差,不适合作为定位元素的依据。

解决步骤

  1. 先验证请求是否正常,打印响应状态码和页面源码确认返回内容符合预期:
from bs4 import BeautifulSoup
import requests

url = 'https://www.zillow.com/homedetails/9991-Joplin-St-Commerce-City-CO-80022/58649635_zpid/'
headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"}
res = requests.get(url, headers=headers)
# 打印状态码,正常应该返回200
print(res.status_code)
soup = BeautifulSoup(res.content, "html.parser")
# 打印页面源码确认是否存在你要的内容
print(soup.prettify())
  1. 处理动态渲染问题:如果确认静态源码没有对应内容,改用Selenium、Playwright等模拟浏览器的工具加载完整页面后再提取元素。
  2. 更换更稳定的定位逻辑:不要用动态hash类名,可通过父级a标签的稳定类ws-value定位后再取内部span文本,示例(Selenium版本):
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get(url)
# 先找class为ws-value的a标签,再取内部span文本
walk_score = driver.find_element(By.CSS_SELECTOR, 'a.ws-value span').text.strip()
print(walk_score)
driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:39:03