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

Selenium无法定位元素导致Zoopla房源地址爬取无输出问题排查

Selenium无法定位元素导致Zoopla房源地址爬取无输出问题排查

我来帮你一步步排查这个问题,你的代码里有几个关键问题,导致根本没抓到房源元素,自然就没输出了,咱们一个个来修正:

  • 多个类名不能直接用By.CLASS_NAME
    Selenium的By.CLASS_NAME只支持传入单个类名,你写的"w6xkpv1 w6xkpv4"是两个类名,所以这个定位方式根本找不到任何房源元素,houses列表直接是空的,循环自然不会执行。要定位同时包含多个类的元素,你应该用By.CSS_SELECTOR,写法是.w6xkpv1.w6xkpv4(用点连接多个类名)。

  • 内部XPath是绝对路径,不是相对当前房源元素的
    你写的XPath是从main-content开始的全页面路径,这完全不是相对于house这个元素的——就算你找到了房源元素,用这个XPath也会去整个页面找,而且根本对应不上单个房源的地址。应该改成相对路径,比如直接找当前house元素下的h2标签(因为房源地址一般就在h2里),写法是.//h2,或者更精准一点找包含地址的特定标签,比如.//a/h2。

  • 缺少页面等待逻辑,元素可能还没加载完成
    你调用driver.get(url)之后立刻就找元素,页面可能还在渲染中,元素根本没加载出来,自然也找不到。最好用显式等待,等目标元素加载完成后再去定位,这样能避免因为页面加载慢导致的定位失败。

下面是修复后的完整代码,你可以直接试试:

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

url= "https://www.zoopla.co.uk/house-prices/england/?new_homes=include&q=england+&orig_q=united+kingdom&view_type=list&pn=1"
driver=webdriver.Chrome()
driver.get(url)

# 显式等待房源元素加载完成,最多等10秒
wait = WebDriverWait(driver, 10)
# 用CSS_SELECTOR定位同时包含两个类的房源元素
houses = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".w6xkpv1.w6xkpv4")))

for house in houses:
    try:
        # 用相对路径找当前房源下的地址h2元素
        address = house.find_element(By.XPATH, ".//h2").text
        print(address)
    except Exception as e:
        # 个别房源可能结构不同,跳过并提示
        print(f"该房源地址获取失败: {str(e)}")

driver.quit()

另外要注意,Zoopla可能有反爬机制,如果频繁访问可能会触发验证或者限制,爬取的时候尽量控制访问频率,避免被封哦。

备注:内容来源于stack exchange,提问作者Chioma Okoroafor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:29:36