如何实现德州人名查找应用的全页面遍历?求可靠方案
人名查找应用全页面遍历实现方案
现有代码问题分析
- 未导入
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
相关产品推荐
相关产品推荐

