
本文详解如何通过循环请求分页api(如wcad房产搜索接口)获取全部结果,涵盖自动翻页逻辑、错误重试机制、请求节流与资源管理等关键实践。
本文详解如何通过循环请求分页api(如wcad房产搜索接口)获取全部结果,涵盖自动翻页逻辑、错误重试机制、请求节流与资源管理等关键实践。
在开发类似“德州人名地址查询”这类数据聚合型应用时,核心挑战之一是可靠地遍历后端返回的分页数据集。许多公共政务API(如威尔县税务评估系统 WCAD)采用基于页码(pn)的分页策略,但不直接返回总页数——而是通过每次响应中的 RecordCount 字段判断是否还有下一页:当该值为 0 时,即表示当前页为末页或无更多结果。
以下是一个健壮、生产就绪的分页遍历实现方案:
✅ 推荐实现:基于 RecordCount 的自适应翻页
import requests
from requests.adapters import HTTPAdapter, Retry
URL = "https://search.wcad.org/ProxyT/Search/Properties/quick/"
def search_by_name(name: str, max_retries: int = 5):
params = {
"f": name,
"pn": 1, # 初始页码(从1开始)
"st": 4, # 排序字段(示例中为OwnerName)
"so": "desc", # 排序方向
"pt": "RP;PP;MH;NR", # 财产类型
"ty": "2024" # 税务年份
}
# 配置重试策略:对 429(Too Many Requests)等临时错误自动重试
retry_strategy = Retry(
total=max_retries,
status_forcelist=[429, 500, 502, 503, 504],
backoff_factor=1.0
)
adapter = HTTPAdapter(max_retries=retry_strategy)
with requests.Session() as session:
session.mount("https://", adapter) # 仅对HTTPS启用重试
while True:
try:
response = session.get(URL, params=params, timeout=10)
response.raise_for_status() # 抛出HTTP错误(如404/500)
data = response.json()
record_count = data.get("RecordCount", 0)
if record_count == 0:
print("✅ 遍历完成:无更多记录。")
break
print(f"? 第 {params['pn']} 页:获取到 {record_count} 条记录")
# ✨ 此处可安全解析并处理 ResultList 数据(如提取 OwnerName + SitusAddress)
# 示例:
# for item in data.get("ResultList", []):
# print(f"{item.get('OwnerName', 'N/A')} — {item.get('SitusAddress', 'N/A')}")
params["pn"] += 1 # 自增页码,进入下一轮请求
# ⚠️ 强烈建议添加合理延迟(如 0.5–2 秒),避免触发反爬或服务限流
import time
time.sleep(1.0)
except requests.exceptions.RequestException as e:
print(f"❌ 请求失败(第 {params['pn']} 页):{e}")
break
except ValueError as e:
print(f"❌ JSON解析失败:{e}")
break
# 使用示例
search_by_name("Kennedy")
? 关键设计说明
- 无需预知总页数:依赖 RecordCount 字段作为终止条件,比解析 TotalPageCount 更可靠(后者可能缺失或不准);
- 会话复用 + 连接池:requests.Session() 复用 TCP 连接,显著提升多请求性能;
- 智能重试机制:Retry 策略针对网络抖动和限流(429)自动恢复,避免单点失败中断全流程;
- 异常防御完备:捕获网络异常、HTTP错误、JSON解析失败等常见问题,保障程序稳定性;
- 合规性提醒:WCAD 等政府网站通常要求遵守 robots.txt 及合理请求频率(建议 ≥1s/次),过度爬取可能被封禁或违反服务条款。
⚠️ 重要法律与伦理提示
本教程仅用于技术原理演示。需特别注意:
- 德州公开房产数据虽属政府信息,但批量抓取并商用需确认其许可协议(WCAD 明确禁止自动化抓取用于商业目的);
- 个人住址属于敏感信息,未经同意的收集与分发可能违反《TCPA》《CCPA》及联邦隐私法规;
- 建议优先使用官方授权API(如 Texas Comptroller 提供的合法数据接口)或购买合规数据服务。
掌握分页遍历不仅是技术能力,更是对数据来源、使用边界与责任意识的综合体现。稳健的代码,始于敬畏规则。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











