使用Beautiful Soup findAll抓取房产网站返回空列表求助
解决房产价格历史数据提取为空的问题
可能的原因及解决方法
- 目标表格嵌套在iframe中:不少房产网站会把历史数据这类内容放在iframe里,Selenium默认只会操作主页面DOM,不会自动进入iframe,需要手动切换到对应iframe才能访问内部元素。
- 静态等待时间不足:
time.sleep(5)是固定时长等待,若页面加载缓慢或数据异步渲染,可能导致元素还未生成就开始解析,建议用显式等待替代,直到目标元素出现再执行后续操作。 - 元素选择器不准确:页面结构可能更新,
property-history这个ID可能已失效,需要重新通过浏览器开发者工具(F12)确认目标表格的实际属性。
修改后的代码示例
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 bs4 import BeautifulSoup driver = webdriver.Chrome() url= "https://www.properly.ca/buy/home/view/ma-tEpHcSzeES-OlhE-V6A/bc/vancouver/1268-w-broadway-%23720/" driver.maximize_window() driver.get(url) try: # 检测并切换到iframe(若存在),可根据实际页面调整iframe定位方式 iframe = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.TAG_NAME, "iframe")) ) driver.switch_to.frame(iframe) # 显式等待目标表格加载完成 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "property-history")) ) # 解析页面内容 content = driver.page_source.encode('utf-8').strip() soup = BeautifulSoup(content,"html.parser") officials = soup.findAll("table",{"id":"property-history"}) for entry in officials: print(str(entry)) finally: driver.quit()
额外提示
- 用浏览器开发者工具查看目标表格的实际位置:确认是否在iframe内,以及表格的ID、class等属性是否正确。
- 若网站有反爬机制,可尝试添加滚动页面、模拟点击等人类操作,触发数据加载。
内容的提问来源于stack exchange,提问作者Vincent Cormier
相关产品推荐
相关产品推荐

