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

如何用Selenium整合主列表与房源详情爬取,生成完整房产数据表?

整合爬虫代码实现批量获取房产数据并输出表格

核心思路

把两段代码整合的关键是:从列表页爬取基础数据时,同时提取每个房源的详情页URL,再逐个访问详情页抓取EPC评级,全程复用同一个浏览器实例提升效率,最后用pandas把数据整理成表格输出。

完整整合代码

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
import pandas as pd

# 初始化浏览器(这里用Chrome,可换成Firefox等)
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

# 存储所有房产数据的列表
property_data = []

try:
    # 列表页循环逻辑(示例爬前3页,可按需修改页数)
    for page in range(1, 4):
        list_url = f"https://www.zoopla.co.uk/for-sale/property/london/?pn={page}"
        driver.get(list_url)
        
        # 等待列表项加载完成
        property_items = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div[data-testid='listing-wrapper']")))
        
        for item in property_items:
            # 爬取地址
            address = item.find_element(By.CSS_SELECTOR, "address[data-testid='listing-address']").text.strip()
            # 爬取房间数(处理无房间数的情况)
            try:
                room_count = item.find_element(By.CSS_SELECTOR, "span[data-testid='bedrooms']").text.strip()
            except:
                room_count = "N/A"
            
            # 提取详情页URL
            detail_link = item.find_element(By.CSS_SELECTOR, "a[data-testid='listing-details-link']").get_attribute("href")
            
            # 跳转到详情页爬取EPC评级
            driver.get(detail_link)
            try:
                # 等待EPC元素加载,适配不同页面结构
                epc_rating = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "div[data-testid='epc-rating'] span"))).text.strip()
            except:
                epc_rating = "N/A"
            
            # 收集数据
            property_data.append({
                "地址": address,
                "房间数": room_count,
                "EPC评级": epc_rating
            })
            
            # 返回列表页继续处理下一个房源
            driver.back()
    
    # 转换为表格并输出
    df = pd.DataFrame(property_data)
    print(df.to_string(index=False))
    # 也可保存为CSV文件
    # df.to_csv("zoopla_property_data.csv", index=False, encoding="utf-8-sig")

finally:
    # 关闭浏览器
    driver.quit()

关键说明

  • 复用浏览器实例:全程用同一个driver,避免反复启动关闭浏览器,大幅提升爬取速度
  • 异常处理:针对房间数、EPC评级可能缺失的情况,捕获异常并赋值为N/A,保证程序不中断
  • 显式等待:用WebDriverWait替代time.sleep(),更稳定地等待元素加载,适配不同网络速度
  • 表格输出:用pandas把收集到的字典列表转换成DataFrame,既可以直接打印成表格,也能保存为CSV文件方便后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:21:01