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

如何实现德州人名查找应用的全页面遍历?求可靠方案

人名查找应用全页面遍历实现方案

现有代码问题分析

  • 未导入requests库,代码运行会直接报错
  • 总页数获取逻辑错误:从ResultList的单个item中提取TotalPageCount,但该字段属于全局响应数据,而非单个结果项
  • 存在重复请求:外层遍历第一页结果的同时,内部while循环又重新请求第一页数据,导致重复处理
  • 缺少异常处理:未考虑JSON解析失败、网络请求超时等情况

优化后的可靠实现方案

核心思路:先请求第一页获取总页数,再按页码依次请求所有页面,同时加入去重和异常处理机制。

import json
import requests  # 补充导入缺失的库
from time import sleep

def namesearchwilcounty(name):
    url = "https://search.wcad.org/ProxyT/Search/Properties/quick/"
    params = {
        "f": name,
        "pn": 1,
        "st": 4,
        "so": "desc",
        "pt": "RP;PP;MH;NR",
        "ty": "2024"
    }
    processed_results = set()  # 全局去重集合

    try:
        # 第一次请求获取总页数和第一页数据
        response = requests.get(url, params=params, timeout=10)
        response.raise_for_status()  # 主动抛出HTTP错误
        data = response.json()

        if not data or "ResultList" not in data or not data["ResultList"]:
            print("未找到匹配数据")
            return

        # 从全局响应中获取总页数,默认1页
        total_page_count = data.get("TotalPageCount", 1)
        print(f"共找到 {total_page_count} 页数据,开始遍历...")
        print("住址与业主姓名:")

        # 遍历所有页面
        for current_page in range(1, total_page_count + 1):
            if current_page > 1:  # 第一页已请求过,后续页面更新页码
                params["pn"] = current_page
                sleep(1)  # 请求间隔,避免触发反爬
                response = requests.get(url, params=params, timeout=10)
                response.raise_for_status()
                page_data = response.json()
            else:
                page_data = data  # 复用第一页数据

            # 处理当前页结果
            for item in page_data["ResultList"]:
                situs_address = item.get("SitusAddress", "地址未提供")
                owner_name = item.get("OwnerName", "姓名未提供")
                result = f"{owner_name} | {situs_address}"
                if result not in processed_results:
                    print(f"第 {current_page} 页:{result}")
                    processed_results.add(result)

        print(f"遍历完成,共获取 {len(processed_results)} 条唯一结果")

    except requests.exceptions.RequestException as e:
        print(f"网络请求错误:{str(e)}")
    except json.JSONDecodeError:
        print("响应数据解析失败,非有效JSON格式")
    except KeyError as e:
        print(f"响应数据缺失关键字段:{str(e)}")

if __name__ == "__main__":
    name = input("请输入全名:")
    namesearchwilcounty(name)

关键优化点说明

  • 正确获取总页数:从全局响应数据data["TotalPageCount"]提取,确保分页逻辑准确
  • 避免重复请求:第一页数据直接复用,无需二次请求
  • 完善异常处理:覆盖网络超时、HTTP错误、JSON解析失败、字段缺失等场景
  • 增强鲁棒性:使用item.get(key, 默认值)避免字段缺失导致的报错
  • 合规请求:保留1秒请求间隔,降低被目标网站封禁IP的风险

内容的提问来源于stack exchange,提问作者Phoenix Robinson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:54:53