如何用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
相关产品推荐
相关产品推荐

