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

Land Registry API技术问询:如何获取指定邮编下房产成交价数据?

解决Land Registry Price Paid API获取成交价的问题

你的代码当前调用的是地址信息端点(/data/ppi/address.csv),该端点仅返回地址与交易的关联关系,不包含成交价数据。要获取成交价,需要切换到交易数据专用端点,或者通过地址关联的交易ID拉取详情,以下是两种可行方案:

方案一:直接请求包含成交价的交易数据(推荐)

使用/data/ppi/ppd.csv端点,该端点返回的CSV直接包含成交价、交易日期、房产类型等核心交易字段,无需二次请求:

import requests
import streamlit as st

# 替换为目标邮编
postcode = "XX1 1XX"
# 价格支付数据专用端点
base_url = "http://landregistry.data.gov.uk/data/ppi/ppd.csv"
params = {"postcode": postcode}

response = requests.get(base_url, params=params)

if response.status_code == 200:
    file_path = "property_transactions_with_price.csv"
    with open(file_path, "wb") as csv_file:
        csv_file.write(response.content)
    st.success(f"包含成交价的交易数据已保存至 {file_path}")
else:
    st.error(f"请求失败,状态码:{response.status_code}")

返回的CSV字段包含price(成交价)、transactionDate(交易日期)、propertyType(房产类型)、address(地址详情)等,可直接满足需求。你还可以添加额外过滤参数(如fromDate、toDate)缩小查询范围。

方案二:先获取地址,再关联交易详情(适合需详细交易数据场景)

如果需要先获取地址列表,再拉取对应交易的完整详情,可通过地址CSV中的transaction字段(交易URI)请求交易数据:

import requests
import streamlit as st
import csv
from io import StringIO
import time

postcode = "XX1 1XX"
address_url = "http://landregistry.data.gov.uk/data/ppi/address.csv"
params = {"postcode": postcode}

address_response = requests.get(address_url, params=params)
if address_response.status_code != 200:
    st.error(f"获取地址失败,状态码:{address_response.status_code}")
else:
    # 解析地址CSV
    csv_data = StringIO(address_response.content.decode("utf-8"))
    reader = csv.DictReader(csv_data)
    combined_data = []

    for row in reader:
        transaction_uri = row.get("transaction")
        if not transaction_uri:
            continue
        # 构造交易详情的CSV请求地址
        transaction_csv_url = f"{transaction_uri}.csv"
        trans_response = requests.get(transaction_csv_url)
        
        # 添加延迟避免触发API限流
        time.sleep(1)
        
        if trans_response.status_code == 200:
            trans_csv = StringIO(trans_response.content.decode("utf-8"))
            trans_reader = csv.DictReader(trans_csv)
            for trans_row in trans_reader:
                # 合并地址与交易数据
                combined_row = {**row, **trans_row}
                combined_data.append(combined_row)

    # 保存合并后的数据
    if combined_data:
        output_file = "address_with_transaction_details.csv"
        with open(output_file, "w", newline="", encoding="utf-8") as f:
            writer = csv.DictWriter(f, fieldnames=combined_data[0].keys())
            writer.writeheader()
            writer.writerows(combined_data)
        st.success(f"地址及成交价数据已保存至 {output_file}")
    else:
        st.warning("未找到关联的交易数据")

注意事项

  • API存在请求频率限制,批量请求时务必添加延迟(如time.sleep(1)),避免被限流
  • 可通过查看返回的CSV表头,确认并提取所需字段
  • 如需更复杂的过滤条件,参考官方文档中的参数说明

内容的提问来源于stack exchange,提问作者fire16.2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:27:06