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

